临沂网站建设咨询,网站模版开发,青海省住房和城乡建设厅网站,如何建设自己网站首先我们的目标是让 s[i][j]表示为其左方和上方形成的矩阵所有元素的和 加上s[i-1][j]和s[i][j-1]后 s[i-1][j-1]部分重复了所以减去
最后加上a[i][j]即可完成目标
s[i][j]s[i-1][j]s[i][j-1]-s[i-1][j-1]a[i][j];
然后看题目要求
要求x1,y1,x2,y2围成的小正方形内的元素和…
首先我们的目标是让 s[i][j]表示为其左方和上方形成的矩阵所有元素的和 加上s[i-1][j]和s[i][j-1]后 s[i-1][j-1]部分重复了所以减去
最后加上a[i][j]即可完成目标
s[i][j]s[i-1][j]s[i][j-1]-s[i-1][j-1]a[i][j];
然后看题目要求
要求x1,y1,x2,y2围成的小正方形内的元素和
我们利用刚刚处理好的s[i][j]来操作 将是s[x2][y2]圈成的大正方形里面扣掉这两块
即s[x2][y1-1]和s[x1-1][y2]
最后加回去重复减去的s[x1-1][y1-1]即可
所以式子为 s[x2][y2]-s[x2][y1-1]-s[x1-1][y2]s[x1-1][y1-1] 代码 #includeiostream #includecstring #includecstdio #includealgorithm using namespace std; const int N1010; int a[N][N],s[N][N];
int n,m,q; int main(){ cinnmq; for(int i1;in;i) { for(int j1;jm;j) { cina[i][j]; s[i][j]s[i-1][j]s[i][j-1]-s[i-1][j-1]a[i][j]; } } while(q--){ int x1,y1,x2,y2; cinx1y1x2y2; couts[x2][y2]-s[x2][y1-1]-s[x1-1][y2]s[x1-1][y1-1]; } return 0; }