-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathfenwick_tree.py
More file actions
37 lines (32 loc) · 815 Bytes
/
fenwick_tree.py
File metadata and controls
37 lines (32 loc) · 815 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
class FenwickTree:
def __init__(self, data) -> None:
self.bit = None
self._build(data)
def _build(self, data):
n = len(data) + 1
self.bit = [0] * n
for i in range(1, n):
for j in range(i, i & (i - 1), -1):
self.bit[i] += data[j - 1]
def add(self, i, delta):
i += 1
while i < len(self.bit):
self.bit[i] += delta
i += i & -i
def sum(self, i):
i += 1
s = 0
while i > 0:
s += self.bit[i]
i &= i - 1
return s
def range_sum(self, l, r):
return self.sum(r) - self.sum(l - 1)
data = list(range(10))
ft = FenwickTree(data)
print(data)
print(ft.bit)
print(ft.sum(5))
print(ft.sum(9))
print(ft.add(2, 5))
print(ft.sum(3))