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?
- int i = 0;
- while(n > pow(2,i))
- i++;
- while(n != pow(2,i))
- 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
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
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)facendo così perchè non va bene?
int i = 0; while(n > pow(2,i))[...]marcoBeretta
ok grazie