Rangetree

Non so perché ti si blocca. Prova a fare un vector ed usare il metodo resize(4*n). Poi come ho già detto l’algoritmo risolutivo non è esattamente quello (è troppo lento).

ma che senso ha dimensionare il vettore a 4*n?


facendo così perchè non va bene?
  1. int i = 0;
  2.     while(> pow(2,i))
  3.         i++;
  4.        
  5.     while(!= pow(2,i))
  6.         n++;

è una perdita di tempo. Con 4*n sei sicuro di essere dentro in ogni caso.

ho aggiunto le righe da 119 a 122 e adesso fa 10 punti al posto di 5

il terzo test case è sbagliato e tutti gli altri vanno in timeout

http://pastebin.com/pXnRNpmq

Per renderlo più veloce (e forse anche più corretto) dovresti fermare il tutto quando sei su un nodo non aggiornato mentre i figli lo sono ed aggiornarlo:

tree[index].value = tree[index2].value + tree[index2+1].value;

No, non funziona

facendo così perchè non va bene?
  1. int i = 0;
  2.     while(> pow(2,i))
[...]

marcoBeretta

Nota che la funzione pow() definita in math.h non è proprio ciò che ti serve per fare cose come 2^i. Va usata solo quando gli argomenti che gli passi sono float o double. Nel tuo caso per fare pow(2,i) la cosa migliore sarebbe: (1<<i)

ok grazie