이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <iostream>
using namespace std;
long long x[1010][1010],n,m,a[1010][1010],ans=-100000000000;
int main()
{
cin>>n>>m;
for(long long i=1;i<=n;++i)
for(long long j=1;j<=m;++j)
{
cin>>a[i][j];
a[i][j]+=i+j;
x[i][j]=a[i][j];
}
for(long long i=n;i>=1;--i)
for(long long j=m;j>=1;--j)
{
if(j<m)
x[i][j]=min(x[i][j],x[i][j+1]);
if(i<n)
x[i][j]=min(x[i][j],x[i+1][j]);
if(ans<a[i][j]-x[i][j]-1)
ans=a[i][j]-x[i][j]-1;
}
for(long long i=n;i>=1;--i)
for(long long j=m;j>=1;--j)
{
a[i][j]-=2*(i+j);
x[i][j]=a[i][j];
if(j<m)
x[i][j]=max(x[i][j],x[i][j+1]);
if(i<n)
x[i][j]=max(x[i][j],x[i+1][j]);
if(ans<x[i][j]-a[i][j]-1)
ans=x[i][j]-a[i][j]-1;
}
for(long long i=1;i<n/2;++i)
for(long long j=1;j<=m;++j)
{
a[i][j]+=i+j;
a[n-i+1][j]+=i+j;
swap(a[i][j],a[n-i+1][j]);
a[i][j]+=i+j;
a[n-i+1][j]+=i+j;
x[i][j]=a[i][j];
x[n-i+1][j]=a[n-i+1][j];
}
if(n%2==0)
{
int i=n/2;
for(long long j=1;j<=m;++j)
{
a[i][j]+=i+j;
a[n-i+1][j]+=i+j;
swap(a[i][j],a[n-i+1][j]);
a[i][j]+=i+j;
a[n-i+1][j]+=i+j;
x[i][j]=a[i][j];
x[n-i+1][j]=a[n-i+1][j];
}
}
else
{
int i=n/2;
for(long long j=1;j<=m;++j)
{
a[i][j]+=i+j;
a[i][j]+=i+j;
x[i][j]=a[i][j];
}
}
for(long long i=n;i>=1;--i)
for(long long j=m;j>=1;--j)
{
if(j<m)
x[i][j]=min(x[i][j],x[i][j+1]);
if(i<n)
x[i][j]=min(x[i][j],x[i+1][j]);
if(ans<a[i][j]-x[i][j]-1)
ans=a[i][j]-x[i][j]-1;
}
for(long long i=n;i>=1;--i)
for(long long j=m;j>=1;--j)
{
a[i][j]=a[i][j]-2*(i+j);
x[i][j]=a[i][j];
if(j<m)
x[i][j]=max(x[i][j],x[i][j+1]);
if(i<n)
x[i][j]=max(x[i][j],x[i+1][j]);
if(ans<x[i][j]-a[i][j]-1)
ans=x[i][j]-a[i][j]-1;
}
cout<<ans;
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |