树状数组区间修改python代码
时间: 2023-10-12 19:18:05 浏览: 74
下面是实现树状数组区间修改的 Python 代码:
```python
class FenwickTree:
def __init__(self, n):
self.n = n
self.tree = [0] * (n + 1)
def update(self, i, delta):
while i <= self.n:
self.tree[i] += delta
i += i & -i
def query(self, i):
res = 0
while i > 0:
res += self.tree[i]
i -= i & -i
return res
def range_update(self, l, r, delta):
self.update(l, delta)
self.update(r + 1, -delta)
def point_query(self, i):
return self.query(i)
```
其中,`range_update` 方法用于对区间 [l, r] 进行修改,delta 表示增加或减少的值。具体实现是将修改转化为两个单点修改,即将 l 处加上 delta,将 r+1 处减去 delta。`point_query` 方法用于查询某个位置的值。
例如,对于数组 a=[1,2,3,4,5],可以这样使用树状数组区间修改:
```python
tree = FenwickTree(5)
# 将 [2, 4] 区间加上 3
tree.range_update(2, 4, 3)
# 查询第 3 个位置的值
print(tree.point_query(3)) # 输出 5
```
阅读全文