差分数组
一、基本概念
差分數(shù)組:對于已知有n個元素的離線數(shù)列d,我們可以建立記錄它每項與前一項差值的差分數(shù)組f:顯然,f[1]=d[1]-0=d[1];對于整數(shù)i∈[2,n],我們讓f[i]=d[i]-d[i-1]。
二、性質(zhì)
(1)計算數(shù)列各項的值:觀察d[2]=f[1]+f[2]=d[1]+d[2]-d[1]=d[2]可知,數(shù)列第i項的值是可以用差分數(shù)組的前i項的和計算的,即d[i]=f[i]的前綴和。
(2)計算數(shù)列每一項的前綴和:第i項的前綴和即為數(shù)列前i項的和,那么推導可知
即可用差分數(shù)組求出數(shù)列前綴和;
三、用途
(1)快速處理區(qū)間加減操作:
假如現(xiàn)在對數(shù)列中區(qū)間[L,R]上的數(shù)加上x,我們通過性質(zhì)(1)知道,第一個受影響的差分數(shù)組中的元素為f[L],即令f[L]+=x,那么后面數(shù)列元素在計算過程中都會加上x;最后一個受影響的差分數(shù)組中的元素為f[R],所以令f[R+1]-=x,即可保證不會影響到R以后數(shù)列元素的計算。這樣我們不必對區(qū)間內(nèi)每一個數(shù)進行處理,只需處理兩個差分后的數(shù)即可;
(2)詢問區(qū)間和問題:
由性質(zhì)(2)我們可以計算出數(shù)列各項的前綴和數(shù)組sum各項的值;那么顯然,區(qū)間[L,R]的和即為ans=sum[R]-sum[L-1];
四、例題
http://acm.hdu.edu.cn/showproblem.php?pid=1556
?
五、參考文章
https://www.cnblogs.com/COLIN-LIGHTNING/p/8436624.html
總結(jié)
- 上一篇: 牛客小白月赛16
- 下一篇: 吉首大学2019年程序设计竞赛