#include<bits/stdc++.h>
#define int long long
using namespace std;
int n;
struct node{
int x,id;
}a[50005];
bool cmp(node a,node b){
return a.x<b.x;
}
unordered_map<int,int> vis;
signed main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i].x>>a[i].id;
vis[a[i].id]=1;
}
int s=vis.size();
vis.clear();
sort(a+1,a+n+1,cmp);
int l=1,r=1,sum=0,minn=INT_MAX;
while(l<=r&&r<=n){
if(sum==s){
minn=min(minn,a[r-1].x-a[l].x);
vis[a[l].id]--;
if(vis[a[l].id]==0){
sum--;
}
l++;
}else{
if(!vis[a[r].id]){
sum++;
}
vis[a[r].id]++;
r++;
}
}
if(sum==s){
minn=min(minn,a[r-1].x-a[l].x);
}
cout<<minn;
return 0;
}
附上数据
50
369 957
199 328
785 17
28 863
920 527
457 282
43 2
803 2
23 847
316 730
336 15
737 2
70 10
230 20
794 92
927 20
691 15
325 10
650 10
68 2
541 506
568 15
531 337
427 2
930 997
538 10
387 858
493 3
764 2
384 10
778 20
430 125
60 20
173 14
863 171
394 306
59 874
136 4
124 3
414 926
168 15
916 981
12 15
887 314
363 2
422 2
212 11
371 85
783 3
374 2
907
我的代码输出
918