제출 #1210100

#제출 시각아이디문제언어결과실행 시간메모리
1210100HanksburgerMaxcomp (info1cup18_maxcomp)C++20
100 / 100
79 ms39752 KiB
#include <bits/stdc++.h>
#define int long long
using namespace std;
int a[1005][1005], b[1005][1005], c[1005][1005], d[1005][1005], e[1005][1005];
signed main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    int n, m, ans=-1e18;
    cin >> n >> m;
    for (int i=1; i<=n; i++)
        for (int j=1; j<=m; j++)
            cin >> a[i][j];
    for (int i=0; i<=n+1; i++)
    {
        for (int j=0; j<=m+1; j++)
        {
            b[i][j]=1e18;
            c[i][j]=-1e18;
            d[i][j]=1e18;
            e[i][j]=-1e18;
        }
    }
    for (int i=1; i<=n; i++)
        for (int j=1; j<=m; j++)
            b[i][j]=min(min(b[i-1][j], b[i][j-1]), a[i][j]-i-j);
    for (int i=1; i<=n; i++)
        for (int j=1; j<=m; j++)
            c[i][j]=max(max(c[i-1][j], c[i][j-1]), a[i][j]+i+j);
    for (int i=1; i<=n; i++)
        for (int j=m; j>=1; j--)
            d[i][j]=min(min(d[i-1][j], d[i][j+1]), a[i][j]-i+j);
    for (int i=1; i<=n; i++)
        for (int j=m; j>=1; j--)
            e[i][j]=max(max(e[i-1][j], e[i][j+1]), a[i][j]+i-j);
    for (int i=1; i<=n; i++)
    {
        for (int j=1; j<=m; j++)
        {
            ans=max(ans, a[i][j]-i-j-b[i][j]-1);
            ans=max(ans, -a[i][j]-i-j+c[i][j]-1);
            ans=max(ans, a[i][j]-i+j-d[i][j]-1);
            ans=max(ans, -a[i][j]-i+j+e[i][j]-1);
        }
    }
    cout << ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...