如何使用二进制索引树进行范围更新,使范围中的每个元素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)
任何形式的帮助将不胜感激。 :)
答案 0 :(得分:1)
c
的乘法逆不是-c
而是1/c
。另外,我不明白,你想通过x += (x & -x)
完成什么。
答案 1 :(得分:0)
这很简单。你只需要运行一个循环。
但是这种方法已经过时了。
最好使用分段树并更新适当的范围,而不仅仅是单个值。