本地运行AC,评测机RE
#include<bits/stdc++.h>
using namespace std;
const int X = 4400;
int n,m,a[X][X],h[X][X],l[X][X],r[X][X],sum[X][X],ans;
int Q(int x1,int y1,int x2,int y2){
return sum[x2][y2]-sum[x2][y1-1]-sum[x1-1][y2]+sum[x1-1][y1-1];
}
signed main(){
scanf("%d%d",&n,&m);
for(int i = 1;i<=n;i++){
for(int j = 1;j<=m;j++){
scanf("%d",&a[i][j]);
sum[i][j] = sum[i-1][j]+sum[i][j-1]-sum[i-1][j-1]+a[i][j];
}
}
for(int i = 1;i<=n;i++){
for(int j = m;j>=1;j--){
if(a[i][j]){
if(a[i][j+1]) r[i][j] = r[i][j+1]+1;
}
}
for(int j = 1;j<=m;j++){
if(a[i][j]){
if(a[i][j-1]) l[i][j] = l[i][j-1]+1;
if(a[i-1][j]){
h[i][j] = h[i-1][j];
l[i][j] = min(l[i][j],l[i-1][j]);
r[i][j] = min(r[i][j],r[i-1][j]);
}else h[i][j] = i;
}
}
}
for(int i = 1;i<=n;i++){
for(int j = 1;j<=m;j++){
ans = max(ans,Q(h[i][j],j-l[i][j],i,j+r[i][j]));
}
}
printf("%d",ans);
return 0;
}