Submission #96448

#TimeUsernameProblemLanguageResultExecution timeMemory
96448KLPPMaxcomp (info1cup18_maxcomp)C++14
100 / 100
459 ms32376 KiB
#include<bits/stdc++.h>

using namespace std;
typedef long long int lld;
lld B[1000][1000];
lld minB[1000][1000];
int n,m;
lld abs(lld a){
	if(a>0)return a;
	return -a;
}
lld solve(){
	lld ans=-1;
	for(int i=0;i<n;i++){
		for(int j=0;j<m;j++){
			minB[i][j]=B[i][j];
			if(i>0)minB[i][j]=min(minB[i][j],minB[i-1][j]);
			if(j>0)minB[i][j]=min(minB[i][j],minB[i][j-1]);
			ans=max(ans,B[i][j]-minB[i][j]-1);
		}
	}
	return ans;
}
int main(){
	cin>>n>>m;
	lld matrix[n][m];
	for(int i=0;i<n;i++){
		for(int j=0;j<m;j++){
			cin>>matrix[i][j];
		}
	}
	
	lld ans=-1;
	for(int i=0;i<n;i++){
		for(int j=0;j<m;j++){
			B[i][j]=matrix[i][j]-i-j;
		}
	}
	ans=max(ans,solve());
	for(int i=0;i<n;i++){
		for(int j=0;j<m;j++){
			B[i][j]=matrix[i][m-1-j]-i-j;
		}
	}
	ans=max(ans,solve());
	for(int i=0;i<n;i++){
		for(int j=0;j<m;j++){
			B[i][j]=matrix[n-1-i][j]-i-j;
		}
	}
	ans=max(ans,solve());
	for(int i=0;i<n;i++){
		for(int j=0;j<m;j++){
			B[i][j]=matrix[n-1-i][m-1-j]-i-j;
		}
	}
	ans=max(ans,solve());
	cout<<ans<<endl;
	return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...