Massiv verilib: a[l:r] aralığının cəmini cavablandırmalı və ayrı-ayrı elementləri a[i] = v dəyişməliyik. Hər ikisindən yüz minlərlə olanda nə naiv dövr (sorğu başına O(n)), nə də prefiks cəmləri (sorğu O(1), amma yeniləmə O(n)) yaraşmır. Seqment ağacı və Fenvik ağacı hər iki əməliyyatı O(log n)-də edir.

![[5 2 7 1 4 3 6 8] üçün cəm ağacı: [2, 6) sorğusu iki hazır düyünü götürür, 8 və 7](img/lessons/algorithms/segment-fenwick-trees-segment.svg)

Sadə üsulların qiyməti

python
import math

n = 100_000                       # array size
q = u = 100_000                   # queries and updates
print("naive sums:      ", q * n)
print("prefix sums:     ", u * n)
print("segment tree:    ", (q + u) * math.ceil(math.log2(n)))
text
naive sums:       10000000000
prefix sums:      10000000000
segment tree:     3400000
ÜsulSorğuYeniləməTikinti
naiv cəmO(n)O(1)O(1)
prefiks cəmləriO(1)O(n)O(n)
seqment ağacıO(log n)O(log n)O(n)
Fenvik ağacıO(log n)O(log n)O(n log n)

Seqment ağacı