不清楚为什么 但是有时候会输出负数
谢谢大佬()
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N = 50005;
int n;
int tmp[N];
struct node{
int x;
int id;
}a[N];
bool cmp1(node a1, node a2){
return a1.id < a2.id;
}
bool cmp2(node a1, node a2){
return a1.x < a2.x;
}
signed main(){
cin >> n;
for(int i = 1;i <= n;i++){
cin >> a[i].x >> a[i].id;
}
sort(a+1, a+n+1, cmp1);
int now = a[1].id, m = 1;
for(int i = 1;i <= n;i++){
if(a[i].id != now){
m++;
now = a[i].id;
a[i].id = m;
}
}
if(m == 1){
cout << "1";
return 0;
}
sort(a+1, a+n+1, cmp2);
int head = 1, ans = 2e9+5;
while(head != n){
for(int i = 1;i <= m;i++) tmp[i] = 0;
int cnt = 1, now = head;
tmp[a[now].id] = 1;
while(1){
now++;
if(tmp[a[now].id] == 0){
tmp[a[now].id] = 1;cnt++;
}
if(a[now].id == a[head].id) break;
if(cnt == m){
ans = min(ans, a[now].x-a[head].x);
break;
}
if(a[now].x-a[head].x > ans) break;
if(now > n){
cout << ans;
return 0;
}
}
head++;
}
cout << ans;
return 0;
}