贪心算法。如果一条线段在另一条线段的内部,那么这条只需要记录下这条线段的长度后,就可以不予以考虑了。剩下的其他线段进行排序,然后考虑重合的部分就可以了。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
pair<int,int> a[500000+5];
int main(){
int n,ans=-500000;
scanf("%d",&n);
for(int i=0;i<n;i++) scanf("%d%d",&a[i].first,&a[i].second);
sort(a,a+n);
int last=a[0].second;
for(int i=1;i<n;i++){
if(a[i].second<last){
ans=max(ans,a[i].second-a[i].first);
}
else{
ans=max(ans,last-a[i].first);
last=a[i].second;
}
}
printf("%d\n",ans);
return 0;
}