前綴和問題


轉自:http://blog.csdn.net/K_rew/article/details/50527287

一維前綴和

這個優化主要是用來在O(1)時間內求出一個序列a中,a[i]+a[i+1]+……+a[j]的和。

具體原理十分簡單:用sum[i]表示(a[1]+a[2]+……+a[i]),其中sum[0]=0,則(a[i]+a[i+1]+……+a[j])即等於sum[j]-sum[i-1]。

二維前綴和

同理,有一維就有二維。對於一個矩陣a,我們也能在O(1)時間內求出子矩陣[x1~x2][y1~y2]的和。

設sum[i][j]為子矩陣[1~i][1~j]的和。則由容斥原理得:

sum[0][j]=sum[i][0]=0

a[x1~x2][y1~y2]=sum[x2][y2]-sum[x1-1][y2]-sum[x2][y1-1]+sum[x1-1][y1-1]

應用問題

核心就兩個字:降維。

面對許多高維問題,往往前綴和是最先想到的降維方法。 
這樣在降維的基礎上,許多更進一步的優化才能實現。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM