樹狀陣列的區間查詢與修改(1)

2021-09-02 17:12:59 字數 622 閱讀 8083

這是樹狀陣列陣列中最簡單的一部分,也成為模板,直接上**:

int lowbit( int x )

void update( int x , int y )

long long sum( int x )

//最後輸出sum(r)-sum(l-1)即可

單點查詢就不說了,我們想怎樣進行區間修改,這裡運用到了差分的思想(我也不知道對不對)。

我們定義乙個陣列c[i]表示這個序列a[i]與a[i-1]的差(沒有絕對值),而c[1]自然等於a[1],所以就有:

也就可以通過修改d[i]來表示字首和

而區間修改是從 first 到 last 中每乙個數加上x , 則a[first]與a[first-1]差多了x ,a[last]與a[last+1]差少了x,其餘的都沒有變

所以我們只需要將d[first]與d[last+1]改變就可以啦。

long long lowbit( long long x )

void update( long long x , long long y )

}void update( int first , int last , int delta)

樹狀陣列的區間修改 查詢

首先看樹狀陣列是用來求字首和比較方便的一種資料結構 sum i sigma a i sum bit x 而區間修改也不難實現 就是引入乙個差分陣列del del i 表示對i n的修改 這樣的話也就是最del i 求字首和 就能得到i n的所有修改了 因為i前的每乙個元素的修改都是對後面所有元素的修...

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

這是一道模板題。給定數列 a 1 a 2 a n 你需要依次進行 q 個操作,操作有兩類 1 i x 給定 i,x,將 a i 加上 x 2 l r 給定 l,r,求 ri la i 的值 換言之,求 a l a l 1 a r 的值 第一行包含 2 個正整數 n,q,表示數列長度和詢問個數。保證 ...

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

也許更好的閱讀體驗 好東西,以後可以不打線段樹了 本篇假定讀者都會最基礎的兩種樹狀陣列,即區改單查和單改區查 思考如何維護乙個區間的值,想到了差分 對乙個差分陣列做一次字首和可以得到每個位置的值 再對每個位置累加一下就是乙個區間的值 公式化的講,就是 設差分陣列為 c 則每個位置的值 val i s...