Se poate face cu arbori de intervale.. (doar le tot implementez de ceva timp si imi ies..)
Cred ca tu iti construiesti arborele gresit!
pt n=3 ai intervalele
[1,3]
[1,2] [3,3]
[1,1] [2,2] X X
--> ai nodul principal [1..N]
--> fii lui [x,y] sunt [x, (x+y) div 2] [(x+y) div 2+1, y]
apoi ca sa obtii ce iti propui tu, iti trebuie 2 valori care sa le tii minte intr-un nod: suma totala a elementelor din intervalul [x..y] si valoarea adaugata per element expliciti intervalului [x..y]
deci daca vreau sa adaug 2 pe intervalul [1,2] (N=3), adaug la suma nodului [1,3] 4, iar la valoarea pe element la [1,2] 2
cand fac querry pe [2,2], trec prin [1,2] si adaug la rezultat acea valoare per element, apoi, daca e cazul adaug si suma din [2,2]
.. nu pot sa explic prea bine in scris, dar cred ca ti-ai facut o idee, mai incerci pe foaie