目录
二维前缀和
二维前缀和,建立在一维前缀和之上,如果我们要求一个矩阵内一个任意
子矩阵的数的和,我们就可以用二维前缀和。
我们可以感性的将其理解为建立在二维平面上的前缀和,如上图:
红色区域所有数的和即为二维前缀和中点(i,j)的值。
一、如何预处理
类比一维前缀和,我们可以在O(n)的时间复杂度下预处理,如下代码:
s[i]=s[i-1]+a[i];
那么对于二维前缀和,我们怎么预处理呢?
先给出算式:
Map[i][j]+Map[i-1][j]+Map[i][j-1]-Map[i-1][j-1]+a[i][j];
(a数组是原数据数组,Map数组用于存放前缀和)
类比一维前缀和,因为我们从左到右在计算a[i]的时候已经知道了a[i−1]的值,所以同理,我们从左上向右下在计算Map[i][j