0x03前缀和、差分
一维前缀和
数组前n项和
s [ k ] = ∑ i = 1 k a [ i ] s[k]=\sum_{i=1}^ka[i] s[k]=∑i=1ka[i]
s[i]=s[i-1]+a[i];
二维前缀和
设s[i][j]
表示以(1,1)
为顶点,以(i,j)
为右下角的矩形内部权值之和。
即: s [ n ] [ m ] = ∑ i = 1 n ∑ j = 1 m a [ i ] [ j ] s[n][m]=\sum_{i=1}^{n}\sum_{j=1}^ma[i][j] s[n][m]=∑i=1n∑j=1ma[i][j]
设a[i][j]
为(i,j)
点的权值。
那么s[i][j]
可以表示为:
s[i][j]=s[i-1][j]+s[i][j-1]-s[i-1][j-1]+a[i][j];
假如我们要求矩阵中 R x R 的矩形的权值和:
ans = s[i+R][j+R]-s[i-1]