二进制索引树中的范围更新

时间:2014-01-08 17:30:55

标签: range binary-indexed-tree

如何使用二进制索引树进行范围更新,使范围中的每个元素A[k]更新为[i..j] A[k]*c,其中c是常量。

我需要在这样的更新操作之后进行点查询。

我尝试使用下面的函数,但它没有工作,这里n是数组的大小,c是我想要将范围的每个元素乘以的常量。

def updateM(x, c, n):
while x <= n:
    BIT[x] *= c
    x += (x & -x)

这些是我更新范围的要求:

updateM(i, c, n)
updateM(j+1, -c, n)

任何形式的帮助将不胜感激。 :)

2 个答案:

答案 0 :(得分:1)

c的乘法逆不是-c而是1/c。另外,我不明白,你想通过x += (x & -x)完成什么。

答案 1 :(得分:0)

这很简单。你只需要运行一个循环。

但是这种方法已经过时了。

最好使用分段树并更新适当的范围,而不仅仅是单个值。