1. 程式人生 > >關於樹狀陣列的區間修改和單點查詢

關於樹狀陣列的區間修改和單點查詢

寫在前面

之前一直不知道樹狀陣列可以支援區間修改,所以寫一篇部落格記錄一下。

首先給個小栗子:

如下圖:

利用差分的思路,就得到下圖:

那麼如果我們要求將2~4的所有元素+2呢?我們就可以得到下圖:

可以發現,差分的第二項和第五項一個加了2,一個減了2,所以對於每次區間[l,r]操作,我們只需要在l和r+1的位置加、減操作值即可,證明也很簡單,首先操作區間內的數的差肯定不會變,所以區間內的一段相同,因為第一項增加了一個值k,所以他與前面一項的差就增加了k,最後一項增加了k,最後一項的後一項與最後一項的差就減小了k,所以最後變化的就只有l和r+1位置的數,單點查詢就只需要求字首和即可。