贪心,记录前面末尾坐标最长的点
#include <iostream>
#include <algorithm>
#include <cstdio>
using namespace std;
const int MAX = 50005;
struct Node{
int a;
int b;
}p[MAX];
int cmp(Node p1,Node p2)
{
if(p1.a<p2.a)return 1;
else if(p1.a==p2.a&&p1.b>p2.b)return 1;
return 0;
}
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
for(int i = 0;i < n ;i++){
scanf("%d %d",&p[i].a,&p[i].b);
}
sort(p,p+n,cmp);
int res = 0;
Node s = p[0];
for(int i = 1; i < n; i++)
{
if(p[i].b<=s.b){
res=max(res,p[i].b-p[i].a);
}
else if(p[i].a<=s.b&&p[i].b>s.b){
res=max(res,s.b-p[i].a);
s=p[i];
}
}
printf("%d\n",res);
}
return 0;
}