最開始和很不敢相信竟然樹狀陣列還可以區間修改,既然常數這麼小,而且好寫易調的樹狀陣列可以寫區間修改了,那豈不美滋滋?
所以我在網上查了查做法,竟然學會了???
orz
這篇部落格給了我很大幫助
然後我們可以這樣思考,如果現在是區間修改,單點查詢,那麼我們是不是可以差分一下,在區間的開始和結束進行差分標記,然後用樹狀陣列維護差分陣列的字首和即可,然後詢問的時候只需要詢問到到這個點的差分陣列的字首和再加上這個點的值就可以吧
那麼如果是區間修改區間查詢呢?我們仍然維護字首和,也是差分陣列的字首和,不過維護的方式有一些變化,我們進行如下的公式推導su
m[i]
=∑j=
1ia[
j]+d
elta
[1]∗
i+de
lta[
2]∗(
i−1)
+...
+del
ta[i
]∗1
=∑j=
1ia[
j]+∑
j=1i
delt
a[j]
∗(i−
j+1)
=∑j=1ia
[j]+
∑j=1
idel
ta[j
]−∑j
=1id
elta
[j]∗
j 所以我們只需要維護後面的兩個式子就行了,分別用兩個樹狀陣列維護delta[x]的字首和和delta[x]*x的字首和,而前面的那個式子我們可以預處理出來
所以我也寫了那位博主的那道題,果然奇快233
樹狀陣列實現區間修改查詢
一般的樹狀陣列對於可減資訊可以實現單點修改 區間查詢,如果套用差分,可以實現區間修改 單點查詢。設要維護的序列 a 差分陣列 d i a i a 要求 1,x 區間的和 begin query x sum x a i sum x sum i d i sum x x i 1 d i end 維護乙個序...
樹狀陣列區間修改
有時,我們要支援區間修改,區間查詢。線段樹可以做到。但是樹狀陣列更好寫。1d的情況 設 b i a i a i 1 則 a i b 1 b i a 1 a l b 1 b 1 b 2 b 1 b l a 1 a l l b 1 l 1 b 2 b l sum l i 1 b i 如果我們維護 b i...
差分樹狀陣列
一 假設現在有乙個原陣列a 假設a 0 0 有乙個陣列d,d i a i a i 1 那麼 a i d 1 d 2 d i d陣列就是差分陣列 所以求a i 就可以用樹狀陣列維護d i 的字首和 即維護的是d i 的樹狀陣列 上面的數學思想可以實現區間修改,以及單點查詢。下附上 區間修改 1 n v...