差分数组分析详解+例题
一、定義:
差分,又名差分函數(shù)或差分運(yùn)算,差分的結(jié)果反映了離散量之間的一種變化。
例如,我們有一段離散化序列:a[1],a[2],a[3]......a[n-1],a[n], 我們可以建立數(shù)列的每一項(xiàng)與前一項(xiàng)的差值數(shù)組 c,
則有 c [1] = a[1] - a[0],當(dāng) i>=2 時(shí)有 c[i]=a[i]-a[i-1]。這樣我們就可以將一段序列的差值序列記錄下來。
?
二、性質(zhì):
先來看這樣的例子:
我們可以發(fā)現(xiàn):
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?a[1] = c[1]
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?a[2]=c[1]+c[2]=a[1]+a[2]-a[1]=a[2]
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?.......
我們可以發(fā)現(xiàn)原數(shù)列的第 i 項(xiàng)可以由差分?jǐn)?shù)組前 i 項(xiàng)和得到,也就是 差分?jǐn)?shù)組的前綴和。
如果我們求原數(shù)列的前i項(xiàng)和,就是差分?jǐn)?shù)組的前綴和的前綴和。
列出公式有:
?
三、應(yīng)用:
1、快速的區(qū)間加減操作:
對(duì)一段區(qū)間 [ L ,R] 進(jìn)行加 x 的操作該怎樣進(jìn)行呢,我們知道 c 數(shù)組存儲(chǔ)的是每一項(xiàng)與前一項(xiàng)的差值,一段區(qū)間全部加x,那么區(qū)間內(nèi)的差值應(yīng)該保持不變,需要改變的只是兩個(gè)端點(diǎn), 也就是 c[ L?] 和 c[ R+1]項(xiàng)。c[ L]比前一項(xiàng)多 x,所以有c[L ] += x,c[R]也增加x,其后一項(xiàng) c[ R+1] 減少 x,則 c [R+1] -= x 。
因此我們?cè)谔幚硪欢螀^(qū)間時(shí)可以直接對(duì)受影響的兩個(gè)值進(jìn)行操作即可,簡(jiǎn)單快速。
2、區(qū)間求和、求單點(diǎn)值:
如上面的公式:單點(diǎn)和為差分?jǐn)?shù)組的前綴和,區(qū)間和為差分?jǐn)?shù)組前綴和的前綴和。
3、樹狀數(shù)組中的差分應(yīng)用:
這個(gè)大佬寫的很好,這里不再過多贅述。
https://www.cnblogs.com/kickit/p/9172189.html
?
四、例題:
1、HDU1556--Color the ball ??https://vjudge.net/problem/HDU-1556
2、POJ--3263--????Tallest Cow ??https://vjudge.net/problem/POJ-3263
3、[ NOIP2012提高 & 洛谷P1083] ?借教室 ? ?https://www.luogu.org/problem/P1083
4、二維差分:HDU-6514 ?Monitor???https://vjudge.net/problem/HDU-6514
關(guān)于這個(gè)題,有大佬寫的賊棒:https://blog.csdn.net/D5__J9/article/details/89428614
?
青山遮不住,畢竟東流去。 江晚正愁余,山深問鷓鴣。
刀刃飛,誰可為我敵。衣袂舞,一笑常門寂,而幸相遇,風(fēng)清月明。
致QDU美好的夜景。
?
總結(jié)
以上是生活随笔為你收集整理的差分数组分析详解+例题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 谈谈市面上无线路由器的性能和芯片
- 下一篇: Less学习--注释、变量、转义、可变插