• C++
  • 二维前缀和【子矩阵求和】

  • @ 2023-12-24 20:35:51

image 暴力源码

#include<bits/stdc++.h>
using namespace std;
const int N=1e3+10;
int a[N][N],A[N][N],n,m,q,x1,yy1,x2,y2;

int main(){
	cin>>n>>m>>q;
	for(int i=1;i<=n;i++)
		for(int j=1;j<=m;j++)
		{
			cin>>a[i][j];
			A[i][j] = a[i][j]+A[i-1][j]+A[i][j-1]-A[i-1][j-1];
		}
	for(int i=1;i<=q;i++){
		cin>>x1>>yy1>>x2>>y2;
		int sum=0;
		for(int i=x1;i<=x2;i++)
			for(int j=yy1;j<=y2;j++)
				sum+=a[i][j];
		cout<<sum;
	}
	return 0;
}

二维前缀和源码

#include<bits/stdc++.h>
using namespace std;
const int N=1e3+10;
int a[N][N],A[N][N],n,m,q,x1,yy1,x2,y2;
int main(){
	cin>>n>>m>>q;
	for(int i=1;i<=n;i++)
		for(int j=1;j<=m;j++)
		{
			cin>>a[i][j];
			A[i][j] = a[i][j]+A[i-1][j]+A[i][j-1]-A[i-1][j-1];
		}
	for(int i=1;i<=q;i++){
		cin>>x1>>yy1>>x2>>y2;
		cout<<A[x2][y2]-A[x1-1][y2]-A[x2][yy1-1]+A[x1-1][yy1-1];
	}
	return 0;
}

0 条评论

目前还没有评论...