2014-01-08 32 views
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) 

任何形式的幫助,將不勝感激。 :)

回答

1

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

0

很簡單。你只需要運行一個循環。

但是這種方法已經結束了。

最好使用分段樹並更新適當的範圍,而不僅僅是一個值。