Sto provando a risolvere i problemi rangetree.
Questo è il mio codice, costruisco un albero, e quando devo girare un determinato intervallo, lo faccio girando le foglie più in alto possibile(per comodità gli elementi vanno da 1 a N e non da 0 a N-1):
//L e R sono i valori di input, i e j sono i valori degli estremi del //intervallo rappresentato dal nodo p_esimo
int gira(int L,int R,int i,int j,int p){
if(p<2*N)
if(L>j || R<i) return 0;
else if(L<=i && R>=j) memo[p]+=1;
else{
gira(L,R,i,i+(j-i)/2,p*2);
gira(L,R,i+(j-i)/2+1,j,p*2+1);
}
}
...
if(tipo==0){
gira(A,B,1,N,1);
}
else{
int sol=0,p,S;
//quando devo capire che stato ha un determinato elemento, //risalgo da esso fino alla radice
for(int i=A;i<=B;i++){
p=N-1+i;
S=0;
while(p>0){
S+=memo[p];
p=(int)p/2;
}
sol+=(S%2);
}
printf("%d\n",sol);
}
Prendo solo 40/100 e nei resto dei test case va in execution timed out, cosa ho sbagliato/dimenticato?