演算法筆記 差分陣列

2022-03-05 05:25:17 字數 492 閱讀 8509

差分陣列是什麼呢?

差分陣列是字首和的逆運算,同樣運用到容斥原理

一維:l<=r

a[l]++;

a[r+1]--;

二維:x1<=x2&&y1<=y2

a[x1][y1]++;

a[x1][y2+1]--;

a[x2+1][y1]--;

a[x2+1][y2+1]++;

三維:x1<=x2&&y1<=y2&&z1<=z2

a[x1][y1][z1]++;

a[x2+1][y1][z1]--;

a[x1][y2+1][z1]--;

a[x1][y1][z2+1]--;

a[x1][y2+1][z2+1]++;

a[x2+1][y1][z2+1]++;

a[x2+1][y2+1][z1]++;

a[x2+1][y2+1][z2+1]--;

是不是很簡單,是不是很有規律,相信你能寫出大於3維的情況了

差分陣列學習筆記

對於已知有n個元素的離線數列d,我們可以建立記錄它每項與前一項差值的差分陣列f 顯然,f 1 d 1 0 d 1 對於整數i 2,n 我們讓f i d i d i 1 區間加減操作 o 1 假如現在對數列中區間 l,r 上的數加上x,令f l x,f r 1 x即可。詢問每一項的值 o n 求差分陣...

差分陣列學習筆記

題目 來先看一道裸題,有n個數。m個操作,每一次操作,將x y區間的所有數增加z 最後有q個詢問,每一次詢問求出x y的區間和。那麼這就可以用差分陣列去實現了 差分陣列不僅僅是乙個優秀的資料結構,還是一種很好的思想 差分陣列的功能是修改區間,查詢點 修改區間的時間複雜度是o 1 查詢點的時間複雜度為...

演算法基礎 差分陣列詳解

smile,breathe and go slowly.引入問題 已知乙個陣列 a 10 初始值全部為1。如果要將範圍 1,5 之間的每乙個數字都加1,應當如何操作。最簡單直接的操作就是for迴圈了 for int i 1 i 5 i a i 但是如果資料範圍較大,以及操作次數比較多,用for迴圈時...