**segment tree(세그먼트 트리)**와 **Fenwick tree(Binary Indexed Tree, BIT)**는 둘 다 범위 질의(예: [l, r]에 대한 합)와 **점 갱신(point update)**을 **O(log n)**에 답합니다. 단순 스캔의 O(n)이나 prefix-sum array의 O(n) 갱신과 대비됩니다.
이들이 해결하는 문제
text
array + 많은 "범위 [l,r]의 합" 및 "인덱스 i 갱신" 호출:
단순 prefix sum: 질의 O(1)이지만 갱신은 O(n)
segment/Fenwick: 질의 O(log n) 그리고 갱신 O(log n)
Fenwick tree(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-)
