显示代码纯文本
- #include<bits/stdc++.h>
- using namespace std;
- int m,n,c,h[750][750];
- int ini[750][750]={};
- int ans=1;
- int t;
- int mi[750][750][105];
- int ma[750][750][105];
- int main(){
- freopen("land.in","r",stdin);
- freopen("land.out","w",stdout);
- scanf("%d%d%d",&m,&n,&c);
- for(int i=1;i<=n;i++){
- for(int j=1;j<=m;j++){
- scanf("%d",&h[i][j]);
- }
- for(int j=1;j<=m;j++){
- for(int k=j;k<=m&&k<=j+99;k++){
- if(k==j||(abs(mi[i][j][k-j]-h[i][k])<=c&&abs(ma[i][j][k-j]-h[i][k])<=c)){
- ini[i][j]++;
- if(k==j){
- mi[i][j][1]=ma[i][j][1]=h[i][j];
- }else{
- mi[i][j][k-j+1]=min(mi[i][j][k-j],h[i][k]);
- ma[i][j][k-j+1]=max(ma[i][j][k-j],h[i][k]);
- }
- }else{
- break;
- }
- }
- }
- }
- for(int i=1;i<=n;i++){
- for(int j=1;j<=m;j++){
- t=1;
- while(ini[i][j]>0){
- while(i+t-1<n&&ini[i+t][j]>=ini[i][j]&&ma[i][j][ini[i][j]]-mi[i+t][j][ini[i][j]]<=c&&ma[i+t][j][ini[i][j]]-mi[i][j][ini[i][j]]<=c){
- for(int k=1;k<=ini[i][j];k++){
- ma[i][j][k]=max(ma[i][j][k],ma[i+t][j][k]);
- mi[i][j][k]=min(mi[i][j][k],mi[i+t][j][k]);
- }
- t++;
- }
- ans=max(ans,t*ini[i][j]);
- ini[i][j]--;
- if(i+t-1==n){
- ini[i][j]=0;
- }
- }
- }
- }
- printf("%d",ans);
- fclose(stdin);
- fclose(stdout);
- return 0;
- }