Submission #197117

#TimeUsernameProblemLanguageResultExecution timeMemory
197117RedhoodMaxcomp (info1cup18_maxcomp)C++14
100 / 100
173 ms14604 KiB
#include<bits/stdc++.h>
#define rep(i,x) for(int i = 0; i < x; ++i)
using namespace std;

const int inf = 2e9;
signed main(){
    ios_base::sync_with_stdio(0) , cin.tie(0) , cout.tie(0);
    int n , m;
    cin >> n >> m;
    vector <vector<int>> a(n,vector<int>(m));
    rep(i , n)
        rep(j , m)
            cin >> a[i][j];
    int answer = 0;
    vector<vector<int>>best;
    /// 1 zone

    best = vector<vector<int>>(n,vector<int>(m,inf));
    for(int i = 0; i < n; ++i){
        for(int j = m - 1; j >= 0; --j){
            if(i>0)best[i][j]=min(best[i][j],best[i-1][j]);
            if(j<m-1)best[i][j]=min(best[i][j],best[i][j+1]);
            best[i][j]=min(best[i][j],a[i][j]-i+j);
        }
    }

    rep(i,n)
        rep(j , m)
            answer = max(answer , a[i][j]-i+j-best[i][j]);
    /// 2 zone
    best = vector<vector<int>>(n,vector<int>(m,inf));
    for(int i = n-1; i >=0; --i){
        for(int j = m - 1; j >= 0; --j){
            if(i<n-1)best[i][j]=min(best[i][j],best[i+1][j]);
            if(j<m-1)best[i][j]=min(best[i][j],best[i][j+1]);
            best[i][j]=min(best[i][j],a[i][j]+i+j);
        }
    }
    rep(i,n)
        rep(j , m)
            answer = max(answer , a[i][j]+i+j-best[i][j]);
    /// 3 zone
    best = vector<vector<int>>(n,vector<int>(m,inf));
    for(int i = n-1; i >=0; --i){
        for(int j = 0; j < m; ++j){
            if(i<n-1)best[i][j]=min(best[i][j],best[i+1][j]);
            if(j>0)best[i][j]=min(best[i][j],best[i][j-1]);
            best[i][j]=min(best[i][j],a[i][j]+i-j);
        }
    }
    rep(i,n)
        rep(j , m)
            answer = max(answer , a[i][j]+i-j-best[i][j]);
    /// 4 zone
    best = vector<vector<int>>(n,vector<int>(m,inf));
    for(int i = 0; i < n; ++i){
        for(int j = 0; j < m; ++j){
            if(i>0)best[i][j]=min(best[i][j],best[i-1][j]);
            if(j>0)best[i][j]=min(best[i][j],best[i][j-1]);
            best[i][j]=min(best[i][j],a[i][j]-i-j);
        }
    }
    rep(i,n)
        rep(j , m)
            answer = max(answer , a[i][j]-i-j-best[i][j]);
    cout << answer - 1;
    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...