差分陣列詳解

2022-05-06 15:30:13 字數 771 閱讀 3296

學習部落格:

題目:來先看一道裸題,有n個數。

m個操作,每一次操作,將x~y區間的所有數增加z;

最後有q個詢問,每一次詢問求出x~y的區間和。

思路:很明顯,直接用字首和無法快速滿足這個操作,所以我們就用到了差分陣列。

設a陣列表示原始的陣列;

設d[i]=a[i]-a[i-1](1設f[i]=f[i-1]+d[i](1設sum[i]=sum[i-1]+f[i](1則易知

舉個例子,我們求1~3的區間和.

後面的可以依次類推。

那麼,對於乙個操作,我們可以讓d[x]加上z,讓d[y+1]減小z,就可以了。

還用剛才的例子。

上圖的sum[4]後面應該是3*z(而不是4*z)

後面的可以依次類推。

存個板子:

#includeint

n,m,q;

int a[100000],d[100000],f[100000],sum[100000

];int

main()

for(int i=1;i<=m;i++)

for(int i=1;i<=n;i++)

for(int i=1;i<=q;i++)

}

演算法基礎 差分陣列詳解

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

差分陣列分析詳解 例題

差分,又名差分函式或差分運算,差分的結果反映了離散量之間的一種變化。例如,我們有一段離散化序列 a 1 a 2 a 3 a n 1 a n 我們可以建立數列的每一項與前一項的差值陣列 c,則有 c 1 a 1 a 0 當 i 2 時有 c i a i a i 1 這樣我們就可以將一段序列的差值序列記...

差分陣列概述

在網上講差分陣列的博文很少,也很難找到。一度以為差分陣列是傳播於小眾的神犇技巧所以一直放著沒有去研習。今天做了 bzoj1635後發現各路神犇都用差分陣列,本蒟卻傻傻寫了線段樹。對於序列a 取a i a i 1 為其差分陣列b i 的值,可以發現,a i bj 1 j i 如 對於序列 a b c ...