1. 程式人生 > >樹狀陣列區間修改+單點求值

樹狀陣列區間修改+單點求值

以前寫過樹狀陣列區間修改以及區間查詢,現在才發現自己居然不是很會單點查詢,但其實相差不是很多,但還是來填一下坑吧

差分序列:如果我們用 a 陣列表示原序列,則其差分序列為 c 陣列,即 c [ i ]= a [ i ] - a [ i - 1 ] 

那麼對於a陣列的區間修改(l,r,w)就可以等價為:c陣列的單點修改,c[ l ]  + w 以及 c[ r+1 ] - w(這個由定義就可以很明顯的得到)

那不就完啦,對於區間修改我們就轉化為熟悉的小可愛單點修改了

可單點查詢怎麼辦呢???

這也很容易

我們可以發現 c 陣列的字首和就對應著一個 a陣列中的原數,舉個例子:

a                4 1 5 2 

c                4 -3 4 -3

sigma(c)   4 1 5 2

那單點查是不是就變成字首和啦,又是我們所熟知的,~\(≧▽≦)/~啦啦啦

總結:

樹狀陣列的區間修改+單點查詢

就等價於 其差分序列的 單點修改+區間查詢

程式碼什麼的就不放咯~~~很基礎噠