Submission #1014059

#TimeUsernameProblemLanguageResultExecution timeMemory
1014059snpmrnhlolThe Kingdom of JOIOI (JOI17_joioi)C++17
100 / 100
1125 ms78684 KiB
#include<bits/stdc++.h> using namespace std; const int N = 2e3; const int inf = 1e9; int n,m,mx = -1; int v[N][N]; int v2[N][N]; int pref[N][N]; int suf[N][N]; int sufmx[N][N]; int ans = inf; bool chk(int x){ bool ok = 0; int pt = m - 1; int mx2 = -inf,mn2 = inf; for(int i = 0;i < n;i++){ while(pt >= 0 && pref[i][pt] < mx - x){ pt--; } if(pt != m - 1){ mx2 = max(sufmx[i][pt + 1],mx2); mn2 = min(suf[i][pt + 1], mn2); } } if(mx2 - mn2 <= x){ ok = 1; } return ok; } int main(){ cin>>n>>m; for(int i = 0;i < n;i++){ for(int j = 0;j < m;j++){ cin>>v[i][j]; mx = max(mx,v[i][j]); } } ans = mx; for(int k = 0;k < 4;k++){ for(int i = 0;i < n;i++){ for(int j = 0;j < m;j++){ pref[i][j] = min((j == 0?inf:pref[i][j - 1]),v[i][j]); } } for(int i = 0;i < n;i++){ for(int j = m - 1;j >= 0;j--){ suf[i][j] = min((j == m - 1?inf:suf[i][j + 1]),v[i][j]); sufmx[i][j] = max((j == m - 1?0:sufmx[i][j + 1]),v[i][j]); } } int l = 0,r = ans; while(l != r){ int mij = (l + r)/2; if(chk(mij)){ r = mij; }else l = mij + 1; } ans = min(ans,l); for(int i = 0;i < n;i++){ for(int j = 0;j < m;j++){ v2[j][n - i - 1] = v[i][j]; } } swap(n,m); for(int i = 0;i < n;i++){ for(int j = 0;j < m;j++){ v[i][j] = v2[i][j]; } } } cout<<ans<<'\n'; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...