제출 #1314154

#제출 시각아이디문제언어결과실행 시간메모리
1314154boclobanchatThe Kingdom of JOIOI (JOI17_joioi)C++20
100 / 100
1255 ms83044 KiB
#include<bits/stdc++.h> using namespace std; const int MAXN=2025; int f[MAXN],val[MAXN][MAXN],P[MAXN][MAXN],V[MAXN*MAXN]; pair<int,int> pos[MAXN*MAXN]; bool ck[MAXN*MAXN]; bool comp(pair<int,int> a,pair<int,int> b) { return val[a.first][a.second]<val[b.first][b.second]; } int main() { ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n,m; cin>>n>>m; int cnt=0; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) { cin>>val[i][j]; pos[++cnt]={i,j}; } sort(pos+1,pos+n*m+1,comp); for(int i=1;i<=n*m;i++) P[pos[i].first][pos[i].second]=i,V[i]=val[pos[i].first][pos[i].second]; int ans=V[n*m]-V[1],mx=0,r=1; for(int i=1;i<=n*m;i++) { for(int j=pos[i].first;j>0&&f[j]<pos[i].second;j--) while(f[j]<pos[i].second) ck[P[j][++f[j]]]=true,mx=max(mx,val[j][f[j]]); while(ck[r]) r++; if(r<=n*m) ans=min(ans,max(mx-V[1],V[n*m]-V[r])); } for(int i=1;i<=n*m;i++) ck[i]=false; for(int i=1;i<=n;i++) f[i]=0; mx=0,r=1; for(int i=1;i<=n*m;i++) { for(int j=pos[i].first;j<=n&&f[j]<pos[i].second;j++) while(f[j]<pos[i].second) ck[P[j][++f[j]]]=true,mx=max(mx,val[j][f[j]]); while(ck[r]) r++; if(r<=n*m) ans=min(ans,max(mx-V[1],V[n*m]-V[r])); } for(int i=1;i<=n*m;i++) ck[i]=false; for(int i=1;i<=n;i++) f[i]=m+1; mx=0,r=1; for(int i=1;i<=n*m;i++) { for(int j=pos[i].first;j>0&&f[j]>pos[i].second;j--) while(f[j]>pos[i].second) ck[P[j][--f[j]]]=true,mx=max(mx,val[j][f[j]]); while(ck[r]) r++; if(r<=n*m) ans=min(ans,max(mx-V[1],V[n*m]-V[r])); } for(int i=1;i<=n*m;i++) ck[i]=false; for(int i=1;i<=n;i++) f[i]=m+1; mx=0,r=1; for(int i=1;i<=n*m;i++) { for(int j=pos[i].first;j<=n&&f[j]>pos[i].second;j++) while(f[j]>pos[i].second) ck[P[j][--f[j]]]=true,mx=max(mx,val[j][f[j]]); while(ck[r]) r++; if(r<=n*m) ans=min(ans,max(mx-V[1],V[n*m]-V[r])); } cout<<ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...