Submission #1319403

#TimeUsernameProblemLanguageResultExecution timeMemory
1319403bahaktlThe Kingdom of JOIOI (JOI17_joioi)C++20
100 / 100
1208 ms63368 KiB
#include <bits/stdc++.h>

#define int long long 
#define pb push_back
using namespace std;

const int N=2010;
const int inf=1e18;
const int mod=1e9+7;

int n,m;

int a[N][N],b[N][N];

void rt() {
    for(int i=1;i<=m;i++) {
        for(int j=1;j<=n;j++) {
            b[i][j]=a[j][m-i+1];
        }
    }
    swap(n,m);
    for(int i=1;i<=n;i++) {
        for(int j=1;j<=m;j++) {
            a[i][j]=b[i][j];
        }
    }
}

bool check(int x,int mn,int mx) {
    int r=inf;
    bool ok=1;
    for(int i=1;i<=n;i++) {
        for(int j=1;j<=m;j++) {
            if(a[i][j]>mn+x) r=min(r,j);
        }
        for(int j=r;j<=m;j++) {
            if(a[i][j]<mx-x) ok=0;
        }
    }
    return ok;
}

signed main() {
    ios_base::sync_with_stdio(NULL);
    cin.tie(NULL);
    int T=1;
    // cin>>T;
    while(T--) {
        //int n,m;
        cin>>n>>m;
        int mn=inf,mx=-inf;
        for(int i=1;i<=n;i++) {
            for(int j=1;j<=m;j++) {
                cin>>a[i][j];
                mx=max(mx,a[i][j]);
                mn=min(mn,a[i][j]);
            }
        }
        int ans=inf;
        for(int i=1;i<=4;i++) {
            rt();
            int l=0,r=inf,res;
            while(l<=r) {
                int mid=(l+r)/2;
                if(check(mid,mn,mx)) {
                    res=mid;
                    r=mid-1;
                }
                else l=mid+1;
            }
            ans=min(res,ans);
        }
        cout<<ans<<" ";
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...