二维前缀和差分+离散化
/* 二维前缀和求法 a[i][j]+=a[i][j-1]+a[i-1][j]-a[i-1][j-1]; 构建前缀和 int n,m; scanf("%d%d",&n,&m); for(int i=1;i<=n;i++){//初始化 for(int j=1;j<=m;j++){ int x; scanf("%d",&x); a[i][j]+=a[i][j-1]+a[i-1][j]-a[i-1][j-1]+x; } } 输入n m 以及初始值 进行查询 xx yy的格子最大值为多少 */ include include using namespace std; const int maxn=1e4+5; int a[maxn][maxn]; int b[maxn][maxn]; int main(){ int n,m,q;//n*m格子,进行q次询问 scanf("%d%d",&n,&m); for(int i=1;i<=n;i++){//初始化 for(int j=1;j<=m;j++){ int x; scanf("%d",&x); a[i][j]+=a[i][j-1]+a[i-1][j]-a[i-1][j-1]+x; } } int xx,yy; int ans=0; scanf("%d%d",&xx,&yy); for(int i=xx;i<=n;i++){ for(int