Question Link : https://www.codechef.com/problems/FLIPCOIN

I tried to solve this question using segment tree, when I ran it on my local code editor it worked fine but when I tried to ran it on codechef IDE, it gave me very weird error something like SIGABRT. Can someone pls tell me what mistake I made.

Here’s my code:

```
#include <bits/stdc++.h>
using namespace std;
void buildTree(int *arr, int *tree, int startIndex, int endIndex, int start){
//base case
if(startIndex == endIndex){
tree[start] = arr[startIndex];
return;
}
//recursive call
int mid = (startIndex + endIndex)/2;
buildTree(arr, tree, startIndex, mid, 2 * start + 1);
buildTree(arr, tree, mid + 1, endIndex, 2 * start + 2);
tree[start] = tree[2 * start + 1] + tree[2 * start + 2];
}
int query(int *tree, int left, int right, int startIndex, int endIndex, int start){
//total overlap
if(left <= startIndex && right >= endIndex) return tree[start];
//no overlap
if(left > endIndex || right < startIndex) return 0;
//partial overlap
int mid = (startIndex + endIndex)/2;
return query(tree, left, right, startIndex, mid, 2 * start + 1) + query(tree, left, right, mid + 1, endIndex, 2 * start + 2);
}
void update(int *tree, int left, int right, int startIndex, int endIndex, int start){
//not in bounds
if(left > endIndex || right < startIndex) return;
//base case
if(startIndex == endIndex){
tree[start] = tree[start] == 1 ? 0 : 1;
return;
}
//recursive calls
int mid = (startIndex + endIndex)/2;
update(tree, left, right, startIndex, mid, 2 * start + 1);
update(tree, left, right, mid + 1, endIndex, 2 * start + 2);
tree[start] = tree[2 * start + 1] + tree[2 * start + 2];
}
int main() {
// your code goes here
int n, c;
cin>>n>>c;
int arr[n];
memset(arr, 0, sizeof(arr));
int *tree = new int[2 * (n - 1) - 1];
memset(tree, 0, sizeof(tree));
buildTree(arr, tree, 0, n - 1, 0);
while(c--){
int q[3];
for(int i = 0; i<3; i++) cin>>q[i];
if(q[0] == 1) cout<<query(tree, q[1], q[2], 0, n - 1, 0)<<endl;
else update(tree, q[1], q[2], 0, n - 1, 0);
}
delete tree;
return 0;
}
```