Submission #1212328

#TimeUsernameProblemLanguageResultExecution timeMemory
1212328biankThe Kingdom of JOIOI (JOI17_joioi)C++20
100 / 100
391 ms142052 KiB
#include <bits/stdc++.h> using namespace std; #define forn(i,n) for(int i=0;i<int(n);i++) #define forsn(i,s,n) for(int i=int(s);i<int(n);i++) #define dforn(i,n) for(int i=int(n)-1;i>=0;i--) #define dforsn(i,s,n) for(int i=int(n)-1;i>=int(s);i--) #define fst first #define snd second #define pb push_back #define eb emplace_back #define sz(x) (int)x.size() #define all(x) x.begin(), x.end() typedef long long ll; typedef vector<ll> vll; typedef vector<int> vi; typedef pair<int,int> ii; const int INF=1e9+20; vector<vi> rotate(const vector<vi> &a){ int h=sz(a),w=sz(a[0]); vector<vi> b(w,vi(h)); forn(i,h) forn(j,w){ b[w-j-1][i]=a[i][j]; } return b; } int main(){ ios::sync_with_stdio(0); cin.tie(0); int h,w; cin>>h>>w; vector<vi> a(h,vi(w)); forn(i,h) forn(j,w){ cin>>a[i][j]; } int mini=INF,maxi=-INF; forn(i,sz(a)) forn(j,sz(a[0])){ mini=min(mini,a[i][j]); maxi=max(maxi,a[i][j]); } vector<vi> r[4]; forn(t,4){ r[t]=a; a=rotate(a); } vector<vi> suff[4]; forn(t,4){ int n=sz(r[t]),m=sz(r[t][0]); suff[t].assign(n,vi(m+1)); forn(i,n){ suff[t][i][m]=-INF; dforn(j,m) suff[t][i][j]=max(suff[t][i][j+1],r[t][i][j]); } } auto check=[&](int d){ forn(t,4){ int n=sz(r[t]),m=sz(r[t][0]); bool flag=maxi-r[t][0][0]<=d&&r[t][n-1][m-1]-mini<=d; if(!flag) continue; int p=m; forn(i,n){ int j=0; while(j<p&&maxi-r[t][i][j]<=d) j++; if(suff[t][i][j]-mini>d){ flag=false; break; } p=j; } if(flag) return true; } return false; }; int lo=-1,hi=maxi-mini; while(hi-lo>1){ int mid=(lo+hi)/2; if(check(mid)) hi=mid; else lo=mid; } cout<<hi<<'\n'; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...