# Rangetree

**URL:** <https://forum.olinfo.it/t/rangetree/3832>\
**Category:** Aiuto\
**Created:** [11 Agosto 2014, 12:06pm UTC](https://forum.olinfo.it/t/rangetree/3832 "2014-08-11T12:06:03Z")\
**Posts on this page:** 8\
**Page:** 2

<div class="post-metadata">

**Author:** ![Lawliet](https://forum.olinfo.it/user_avatar/forum.olinfo.it/lawliet/32/28_2.png) [@Lawliet](https://forum.olinfo.it/u/Lawliet)\
**Post date:** [11 Agosto 2014, 7:17pm UTC](https://forum.olinfo.it/t/rangetree/3832/21 "2014-08-11T19:17:52Z")

</div>

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).

---

<div class="post-metadata">

**Author:** ![marcoBeretta](https://forum.olinfo.it/letter_avatar_proxy/v4/letter/m/ed655f/32.png) [@marcoBeretta](https://forum.olinfo.it/u/marcoBeretta)\
**Post date:** [11 Agosto 2014, 7:21pm UTC](https://forum.olinfo.it/t/rangetree/3832/22 "2014-08-11T19:21:07Z")

</div>

ma che senso ha dimensionare il vettore a&nbsp;4\*n?

  

facendo così perchè non va bene?

1. 
int&nbsp;i&nbsp;=&nbsp;0;
2. 
&nbsp; &nbsp;&nbsp;while(n&nbsp;\>&nbsp;pow(2,i))
3. 
&nbsp; &nbsp; &nbsp; &nbsp; i++;
4. 
&nbsp; &nbsp; &nbsp; &nbsp;
5. 
&nbsp; &nbsp;&nbsp;while(n&nbsp;!=&nbsp;pow(2,i))
6. 
&nbsp; &nbsp; &nbsp; &nbsp; n++;

---

<div class="post-metadata">

**Author:** ![Lawliet](https://forum.olinfo.it/user_avatar/forum.olinfo.it/lawliet/32/28_2.png) [@Lawliet](https://forum.olinfo.it/u/Lawliet)\
**Post date:** [11 Agosto 2014, 7:27pm UTC](https://forum.olinfo.it/t/rangetree/3832/23 "2014-08-11T19:27:14Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![marcoBeretta](https://forum.olinfo.it/letter_avatar_proxy/v4/letter/m/ed655f/32.png) [@marcoBeretta](https://forum.olinfo.it/u/marcoBeretta)\
**Post date:** [11 Agosto 2014, 7:33pm UTC](https://forum.olinfo.it/t/rangetree/3832/24 "2014-08-11T19:33:27Z")

</div>

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](http://pastebin.com/pXnRNpmq)

---

<div class="post-metadata">

**Author:** ![Lawliet](https://forum.olinfo.it/user_avatar/forum.olinfo.it/lawliet/32/28_2.png) [@Lawliet](https://forum.olinfo.it/u/Lawliet)\
**Post date:** [11 Agosto 2014, 7:55pm UTC](https://forum.olinfo.it/t/rangetree/3832/25 "2014-08-11T19:55:24Z")

</div>

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[index_2].value + tree[index_2+1].value;
```

---

<div class="post-metadata">

**Author:** ![marcoBeretta](https://forum.olinfo.it/letter_avatar_proxy/v4/letter/m/ed655f/32.png) [@marcoBeretta](https://forum.olinfo.it/u/marcoBeretta)\
**Post date:** [11 Agosto 2014, 8:04pm UTC](https://forum.olinfo.it/t/rangetree/3832/26 "2014-08-11T20:04:52Z")

</div>

No, non funziona

---

<div class="post-metadata">

**Author:** ![wil93](https://forum.olinfo.it/user_avatar/forum.olinfo.it/wil93/32/2862_2.png) [@wil93](https://forum.olinfo.it/u/wil93)\
**Post date:** [11 Agosto 2014, 9:06pm UTC](https://forum.olinfo.it/t/rangetree/3832/27 "2014-08-11T21:06:43Z")

</div>

> facendo così perchè non va bene?
> 
> 1. 
> int&nbsp;i&nbsp;=&nbsp;0;
> 2. 
> &nbsp; &nbsp;&nbsp;while(n&nbsp;\>&nbsp;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:&nbsp;[(1\<\<i)](http://www.cs.umd.edu/class/sum2003/cmsc311/Notes/BitOp/bitshift.html)

---

<div class="post-metadata">

**Author:** ![marcoBeretta](https://forum.olinfo.it/letter_avatar_proxy/v4/letter/m/ed655f/32.png) [@marcoBeretta](https://forum.olinfo.it/u/marcoBeretta)\
**Post date:** [12 Agosto 2014, 8:53am UTC](https://forum.olinfo.it/t/rangetree/3832/28 "2014-08-12T08:53:07Z")

</div>

ok grazie

[Pagina precedente](https://forum.olinfo.it/t/rangetree/3832.md?page=1)
