[USACO11NOV] Cow Lineup S(黄)
[USACO11NOV] Cow Lineup S(黄)
这不就是 [CSP-X2022 山东] 动物园吗,然后用队列就能求出结果。
代码
#include<bits/stdc++.h>
using namespace std;
#define int long long
/*====================*/
const int N=1e6+10;
/*====================*/
const int INF=0x3f3f3f3f;
const int MOD=998244353;
/*====================*/
int n,m=0,ans=INF;
struct A{int a,b;
}a[N];
map<int,int> b;
/*====================*/
bool cmp(A x,A y){return x.a<y.a;
}
/*====================*/
void Solve(){cin>>n;for(int i=1;i<=n;i++){cin>>a[i].a>>a[i].b;if(b[a[i].b]==0)m++,b[a[i].b]+=1;}sort(a+1,a+1+n,cmp);b.clear();b[a[1].b]=1;int r=1,x=1;for(int i=1;i<=n;i++){while(x<m&&r<n){r++;b[a[r].b]++;if(b[a[r].b]==1)x++;}if(x==m)ans=min(ans,a[r].a-a[i].a);b[a[i].b]--;if(b[a[i].b]==0)x--;}cout<<ans;
}
/*====================*/
signed main(){//freopen(".in","r",stdin);//freopen(".out","w",stdout);ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);int T=1;//cin>>T;while(T--){Solve();}return 0;
}