class fenwicktree():
def __init__(self, size):
#size为所创建的树的大小
self.size = size
self.tree = [0] * (size + 1)
def add(self, idx, delta):
#将索引idx更新为delta,索引从0开始
idx += 1
while idx <= self.size:
self.tree[idx] += delta
idx += idx & -idx
def sum(self, i, j):
#返回索引i到索引j的和,包括i但是不包括j
return self.prefix_sum(j) - self.prefix_sum(i)
def prefix_sum(self, idx):
#返回前idx个数的和
res = 0
while idx > 0:
res += self.tree[idx]
idx -= idx & -idx
return res
#测试
tree = fenwicktree(5)
tree.add(0, 1)
tree.add(1, 2)
tree.add(2, 3)
tree.add(3, 4)
tree.add(4, 5)
print(tree.sum(1, 3))
#输出5
print(tree.prefix_sum(5))
#输出15
使用python实现fenwick树
最新推荐文章于 2024-11-13 17:26:18 发布
文章介绍了Fenwick树(也称二进制索引树)的数据结构,它用于高效地进行动态区间求和操作。通过`add`方法可以更新指定索引的值,`sum`方法可以计算给定区间内的元素总和。示例代码展示了如何创建一个Fenwick树并进行一系列操作,最后输出了区间求和的结果。
摘要由CSDN通过智能技术生成