区间树和芬威克树(Binary Indexed Tree,BIT)都能在O(log n)时间内回答范围查询(例如[l, r]范围内的求和)和点更新,相比之下naive扫描需要O(n),前缀和数组更新需要O(n)。
它们解决的问题
text
Array + many "sum of range [l,r]" and "update index i" calls:
naive prefix sums: query O(1) but UPDATE is O(n)
segment/Fenwick: query O(log n) AND update O(log n)
芬威克树(BIT)— 紧凑而优雅
python
:
():
.t = []*(n+)
():
i +=
i < (.t):
.t[i] += delta
i += i & (-i)
():
i += ; s =
i > :
s += .t[i]
i -= i & (-i)
s
():
.prefix(r) - .prefix(l-)
