Run time error, unable to find what’s wrong with this code
#include <bits/stdc++.h>
#define mx 200
using namespace std;
bool prime[200] ;
void SieveOfEratosthenes()
{
memset(prime, true, sizeof(prime));
prime[0]=false;
prime[1]=false;
for (int p = 2; p * p <= 200; p++)
{
if (prime[p] == true)
{
for (int i = p * p; i <= 200; i += p)
prime[i] = false;
}
}
}
int arr[mx];
int tree[mx*4];
void init(int node,int b, int e){
if (b==e){
int ma=0;
if(prime[arr[b]]){
ma=1;
}
tree[node]=ma;
return;
}
int mid=(b+e)/2;
int left=node2;
int right=node2+1;
init(left,b,mid);
init(right,mid+1,e);
tree[node]=tree[left]+tree[right];
}
int query(int node , int b, int e, int i , int j){
if (i>e || j<b )
return 0;
if (b>=i && e<=j)
return tree[node];
int mid=(b+e)/2;// else
int left=node2;
int right=node2+1;
int p1=query(left,b,mid,i,j);
int p2=query(right,mid+1,e,i,j);
return p1+p2;
}
void update(int node, int b, int e, int i, int newvalue){
if (i>e || i<b){
return;
}
if(b >= i && e<=i ){
tree[node]= newvalue;
return;
}
int left = node2;
int right = node2+1;
int mid=(b+e)/2;
update(left,b,mid,i,newvalue);
update(right,mid+1,e,i,newvalue);
tree[node]=tree[left] + tree[right];
}
int main()
{
SieveOfEratosthenes();
int t;cin>>t;
for (int i=1; i<=t; i++){
cin>>arr[i];
}
init(1,1,t);
int q;cin>>q;
for(int i=0; i<q;i++){
int d,l,r;cin>>d>>l>>r;
if(d==1){
cout<<query(1,1,t,l,r)<<“\n”;
}
else{
int u_val=0;
if(prime[r]){
u_val=1;
}
update(1,1,t,l,u_val);
//for(int j=1; j<=2*t-1; j++){
// cout<<tree[i]<<" “;
// }
//cout<<”\n";
}
}
return 0;
}