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

2021-08-28 19:04:05 字數 552 閱讀 1153

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

差分序列:如果我們用 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

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

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

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

**什麼的就不放咯~~~很基礎噠

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

說一下差分 現在我們有乙個從小到大的數列a a 1 3 6 8 9 然後還有乙個差分陣列b b 1 2 3 2 1 對應 1,3 1,6 3,8 6,9 8,相信某些同學絕已經看出端倪了.這裡b i a i a i 1 我令a 0 0,故b 1 a 1 int now 0,temp scanf d ...

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

普通的單點修改單點查詢就不講了,從區間修改和單點查詢講起。原來的值存在a裡面,多建立個陣列c1,注意 c1 i a i a i 1 那麼求a i 的值的時候a i a i 1 c1 i a i 2 c1 i c1 i 1 c1 1 c1 2 c1 i 所以就用c1建立樹狀陣列,便可以很快查詢a i ...

樹狀陣列(區間修改,單點查詢)

如題,已知乙個數列,你需要進行下面兩種操作 1.將某區間每乙個數數加上x 2.求出某乙個數的值 輸入格式 第一行包含兩個整數n m,分別表示該數列數字的個數和操作的總個數。第二行包含n個用空格分隔的整數,其中第i個數字表示數列第i項的初始值。接下來m行每行包含2或4個整數,表示乙個操作,具體如下 操...