差分數組

1、差分數組的定義及用途
1.定義:
對於已知有n個元素的數列d,創建記錄它每項與前一項差值的差分數組f:顯然,f[1]=d[1]-0=d[1];對於整數i∈[2,n],咱們讓f[i]=d[i]-d[i-1]。html

2.簡單性質:
(1)計算數列各項的值:觀察d[2]=f[1]+f[2]=d[1]+d[2]-d[1]=d[2]可知,d[i]=f[i]的前綴和。
(2)計算數列每一項的前綴和:第i項的前綴和即爲數列前i項的和,那麼推導可知數組

便可用差分數組求出數列前綴和;htm

3.用途:
(1)快速處理區間加減操做:
對數列區間[L,R]中的每一個數加上x,咱們經過性質(1)知道,第一個受影響的差分數組中的元素爲f[L],即令f[L]+=x,那麼後面數列元素在計算過程當中都會加上x;blog

最後一個受影響的差分數組中的元素爲f[R],因此令f[R+1]-=x,便可保證不會影響到R之後數列元素的計算。get

這樣咱們沒必要對區間內每個數進行處理,只需處理兩個差分後的數便可;博客

(2)詢問區間和問題:
由性質(2)咱們能夠計算出數列各項的前綴和數組sum各項的值;那麼顯然,區間[L,R]的和即爲ans=sum[R]-sum[L-1];im

 

參考博客:http://www.javashuo.com/article/p-uyaywfoi-hw.htmldb

相關文章
相關標籤/搜索