1

如何使用二进制索引树进行范围更新,以便范围内的每个元素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)

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

4

2 回答 2

1

cis not -cbut的乘法逆元1/c。另外,我不明白,您要通过x += (x & -x).

于 2014-01-12T17:54:15.573 回答
0

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

但这种方法杀过头了。

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

于 2014-01-29T14:37:46.207 回答