giving tle
my code
import java.io.OutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.util.StringTokenizer;
import java.io.IOException;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.InputStream;
import java.util.;
import java.lang.;
import java.io.;
import java.math.BigInteger;
import java.math.;
import java.util.*;
public class Main {
static int tree[];
static void build(int a[],int s,int e,int tree[],int index){
if(s==e){
tree[index]=a[s];
return;
}
int mid=(s+e)/2;
//System.out.println((2index)+" "+(2index+1));
build(a,s,mid,tree,2index);
build(a,mid+1,e,tree,2index+1);
tree[index]=(tree[2*index]2)+tree[2index+1];
return;
}
static void update(int tree[],int ss,int se,int i,int value,int index){
if(i>se || i<ss){
return ;
}
else if(se==ss && se==i){
tree[index]=value;
return ;
}
else{
int mid=(ss+se)/2;
update(tree,ss,mid,i,value,2*index);
update(tree,mid+1,se,i,value,2*index+1);
tree[index]=(tree[2*index]*2)+tree[2*index+1];
return ;
}
}
static int query(int tree[],int ss,int se,int qs,int qe,int index){
if(qs>se || qe<ss){
return 0;
}
if(qs<=ss && qe>=se){
return tree[index];
}
int mid=(ss+se)/2;
int leftAns= query(tree,ss,mid,qs,qe,2*index);
int rightAns= query(tree,mid+1,se,qs,qe,2*index+1);
return ((leftAns*2)+rightAns);
}
public static void main(String args[]) {
Scanner sc = new Scanner(System.in);
int n= sc.nextInt();
int q=sc.nextInt();
int a[]= new int[n];
for(int i=0;i<n;i++){
a[i]=0;
}
tree= new int[4*n+1];
build(a,0,n-1,tree,1);
for(int i=0;i<q;i++){
int type=sc.nextInt();
if(type==0){
int l=sc.nextInt();
int r=sc.nextInt();
for(int f=l;f<=r;f++){
update(tree,0,n-1,f,0,1);}
}
else if(type==1){
int l=sc.nextInt();
int r=sc.nextInt();
for(int f=l;f<=r;f++){
update(tree,0,n-1,f,1,1);}
}
else if(type==2){
int l=sc.nextInt();
int r=sc.nextInt();
int ans= query(tree,0,n-1,l,r,1);
System.out.println(ans);
}
}
}
}