S[i, j] =第i行j列格子左上部分所有元素的和 以(x1, y1)为左上角,(x2, y2)为右下角的子矩阵的和为: S[x2, y2] - S[x1 - 1, y2] - S[x2, y1 - 1] + S[x1 - 1, y1 - 1] 由图得,蓝色面积s[i][j]=绿色面积s[i-1][j]+紫色面积s[i][j-1]-重复加的红色面积s[i-1...
S[i, j] = 第i行j列格子左上部分所有元素的和以(x1, y1)为左上角,(x2, y2)为右下角的子矩阵的和为:S[x2, y2] - S[x1 - 1, y2] - S[x2, y1 - 1] + S[x1 - 1, y1 - 1]
子矩阵的和: 输入一个n行m列的整数矩阵,再输入q个询问,每个询问包含四个整数x1, y1, x2, y2,表示一个子矩阵的左上角坐标和右下角坐标。 对于每个询问输出子矩阵中所有数的和。 输入格式 第一行包含三个整数n,m,q。 接下来n行,每行包含m个整数,表示整数矩阵。 接下来q行,每行包含四个整数x1, y1,...
子矩阵的和就是二维的前缀和。 那么,S[i,j]和[X1,Y1],[X2,Y2]的矩阵和就是如下的样子。 子矩阵的和的思路主要采用了“容斥原理”的思想,即,先不考虑重叠情况,计算某一内容包含的所有对象的个数,再排除重复计算的个数,使计算结果既不遗漏也不重复。 左图为S[i,j],右图为(x1,y1),(x2,y2)子矩阵...
子矩阵的和 首先需要理解前缀和:前缀和讲解 先理解一下这篇文章 输入一个 n 行 m 列的整数矩阵,再输入 q 个询问,每个询问包含四个整数 x1,y1,x2,y2,表示一个子矩阵的左上角坐标和右下角坐标。 对于每个询问输出子矩阵中所有数的和。 输入格式 ...
根据s[][]数组来求子矩阵的元素和 res=s[x2,y2]-s[x1-1,y2]-s[x2,y1-1]+s[x1-1,y1-1]; C++ 代码 #include<iostream> #include<algorithm> using namespace std; const int N=1010; int s[N][N];//s[]表示前缀和 int main() { int n,m; scanf("%d%d",&n,&m); int q; scanf...
//子矩阵的和属于二维前缀和的模版题,此题应该注意的点有·两点 //1.在遍历数组输入数据时 应该从1开始进行遍历 因为后面会出现i-1的情况,如果从0开始数据范围则会溢出 //2.在进行x1的计算时 应该记住最后的s[x1-1][x1-1]应该带有-1 using namespace std; const int N = 1010; int n,m,q; int...
输入一个 n 行 m 列的整数矩阵,再输入 q 个询问,每个询问包含四个整数 x1,y1,x2,y2,表示一个子矩阵的左上角坐标和右下角坐标。 对于每个询问输出子矩阵中所有数的和。 输入格式 第一行包含三个整数 n,m,q。 接下来 n 行,每行包含 m 个整数,表示整数矩阵。
子矩阵的和为: 2以 (3, 3) 为左上角,2x2 子矩阵的和为: 2以 (1, 1) 为左上角,3x3 子矩阵的和为: 5以 (1, 2) 为左上角,3x3 子矩阵的和为: 4以 (2, 1) 为左上角,3x3 子矩阵的和为: 4以 (2, 2) 为左上角,3x3 子矩阵的和为: 5以 (1, 1) 为左上角,4x4 子矩阵的和为: ...
prefixSum中的每个元素prefixSum[i][j]表示原矩阵中从(1, 1)到(i, j)的子矩阵的和。 例如,prefixSum[2][2]表示原矩阵中从(1, 1)到(2, 2)的子矩阵的和,即1 + 2 + 4 + 5 = 12。 现在,我们可以使用前缀和数组prefixSum来计算任意子矩阵的和。