二维前缀和


二维前缀和

之前已经说过一维前缀和了,二位前缀和就是在此基础上拓展出来的。

定义式 递推式
一维前缀和 S[i]=S[i-1]+a[i]
二维前缀和 S[i][j]=S[i-1][j]+S[i][j-1]-S[i-1][j-1]+a[i][j]

二维差分

引例:

对于一个给定的 n * m 的矩阵 a ,再给出 q 次操作,每次询问给定 x1 ,y1 ,x2 , y2 ,k ,表示对(x1,y1)为左上角,(x2,y2)为右下角的子矩阵加 k ,最后再输出以(x1,y1)为左上角,(x2,y2)为右下角的子矩阵的所有元素的和。

思路:

为了减少时间的消耗,我们可以利用差分的方式来对这q次操作进行存储,即利用差分的方式,因此我们需要构造一个二维的差分数组,我们用二维数组d来表示差分数组,那么每次操作,我们只需要对数组b进行如下操作

b[x1][y1]+=k;

b[x2+1][y2+1]+=k;

b[x2+1][y1]-=k;

b[x1][y2+1]-=k;

最后经过这个处理,在进行一起求前缀和即可得出答案。

例题:Monitor

(暂时还没有做,等我做了之后再上解析)

参考资料

Monitor题解


文章作者: Amonologue
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Amonologue !
  目录