#include <bits/stdc++.h>
using namespace std;
int const N=1e3+10;
int mn[N][N][4]={};// 0 (0,0) 1(0,m-1) 2(n-1,0) 3(n-1,m-1)
inline void solve()
{
int n,m;
cin>>n>>m;
int a[n][m];
for (int i=0;i<n;i++)
for (int j=0;j<m;j++)
cin>>a[i][j];
{// 0
for (int i=0;i<n;i++)
{
for (int j=0;j<m;j++)
{
mn[i][j][0]=a[i][j]-i-j;
if (i-1>=0)
mn[i][j][0]=min(mn[i][j][0],mn[i-1][j][0]);
if (j-1>=0)
mn[i][j][0]=min(mn[i][j][0],mn[i][j-1][0]);
}
}
}
{// 1
for (int i=0;i<n;i++)
{
for (int j=m-1;j>=0;j--)
{
mn[i][j][1]=a[i][j]-i+j;
if (i-1>=0)
mn[i][j][1]=min(mn[i][j][1],mn[i-1][j][1]);
if (j+1<m)
mn[i][j][1]=min(mn[i][j][1],mn[i][j+1][1]);
}
}
}
{// 2
for (int i=n-1;i>=0;i--)
{
for (int j=0;j<m;j++)
{
mn[i][j][2]=a[i][j]+i-j;
if (i+1<n)
mn[i][j][2]=min(mn[i][j][2],mn[i+1][j][2]);
if (j-1>=0)
mn[i][j][2]=min(mn[i][j][2],mn[i][j-1][2]);
}
}
}
{// 3
for (int i=n-1;i>=0;i--)
{
for (int j=m-1;j>=0;j--)
{
mn[i][j][3]=a[i][j]+i+j;
if (i+1<n)
mn[i][j][3]=min(mn[i][j][3],mn[i+1][j][3]);
if (j+1<m)
mn[i][j][3]=min(mn[i][j][3],mn[i][j+1][3]);
}
}
}
int ans=0;
for (int i=0;i<n;i++)
{
for (int j=0;j<m;j++)
{
{//0
ans=max(ans,a[i][j]-i-j-mn[i][j][0]);
}
{//1
ans=max(ans,a[i][j]-i+j-mn[i][j][1]);
}
{//2
ans=max(ans,a[i][j]+i-j-mn[i][j][2]);
}
{//3
ans=max(ans,a[i][j]+i+j-mn[i][j][3]);
}
}
}
cout<<ans-1<<endl;
}
int main()
{
ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL);
int t=1;
for (int i=1;i<=t;i++)
{
solve();
}
}
| # | 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... |