Submission #1314153

#TimeUsernameProblemLanguageResultExecution timeMemory
1314153boclobanchatThe Kingdom of JOIOI (JOI17_joioi)C++20
0 / 100
1 ms332 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]));
	}
	cout<<ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...