Submission #1014066

#TimeUsernameProblemLanguageResultExecution timeMemory
1014066snpmrnhlolThe Kingdom of JOIOI (JOI17_joioi)C++17
0 / 100
0 ms604 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(){ ios_base::sync_with_stdio(0); cin.tie(0); 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 < 2;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...