子矩阵的和
思想:就先把二维数组[i,j]想象成一个x,y坐标,把[0,0]看成原点,把它画在右下方,横轴代表列j,竖着的代表i。再用一个数组去保存前[i,j]矩阵里的和,原理是通过其各个部分加起来,再减去加了两次的地方。然后求子矩阵的和是用一个完全的矩阵减去不包含在其中的矩阵,然后再加上减了两次的地方,就得到了我们所需要的子矩阵的和。
注意。
不管是初始化矩阵还是求取初始化矩阵的[i,j]的和,他们都是从[1,1]开始的,因为最开始的数据要保存0,这样我们求矩阵和的时候才能更加方便,还有时刻注意那坐标的变化。
代码。
#include<iostream>
const int N=1010;
int n,q,m;
int a[N][N],s[N][N];
int main()