BIT區間加值

本文最後更新於:2022年12月9日 晚上

緒論

眾所周知,BIT能夠實現在O(n)空間下單點加值,並計算區間和。
至於區間加值則需要使用線段樹及lazy tag
但線段樹code超長,debug很累,而且需要約4n的空間。

於是我們想要在BIT上實作區間加值,這有可能嗎?

答案是肯定的。

正文

差分

差分就是將序列中的每一項改為自己減去前一項之值,也就是說:

gi=fifi1,if i>=1
gi=gi,if i=0

於是乎,當我們要求時,只需(?)求出即可。
看起來畫蛇添足,但這在區間加值,單點查詢時很有用。

差分 + BIT?

BIT能夠在時間內完成單點修改區間查詢
而差分則能夠在時間內完成區間加值時間內完成單點查詢

於是乎,我們將兩者合併。

g[]為差分序列
f[]為原序列

所以,我們維護兩顆BIT,分別儲存g[]即可做到完成區間加值區間查詢

例題


BIT區間加值
http://mysh212.github.io/algosolution/BIT區間加值/
作者
ysh
發布於
2022年12月7日
更新於
2022年12月9日
許可協議