主要是不太理解自己错哪了/_ \
#include<bits/stdc++.h>
using namespace std;
struct node{
int x,y;//区间左右两端
int num;//区间长度
}s[150005];
int a[150005],f[150005];
bool cmp(const node &q,const node &p){//用左端点排序
if(q.x !=p.x ) return q.x<p.x ;
return q.y <p.y ;
}
int main(){
int n,ans=0;
scanf("%d",&n);
for(int i=1;i<=n;i++){//输入
scanf("%d%d",&s[i].x ,&s[i].y );
s[i].num=s[i].y -s[i].x +1;
}
sort(s+1,s+n+1,cmp);
for(int i=1;i<=n;i++){
if(i!=1){
int g=lower_bound(a+1,a+i,s[i].x ,greater<int>() )-a;//二分不相交的区间
for(int j=1;j<=g;j++){
f[i]=max(f[j],f[i]);
}//f[i]找最大值
}
f[i]+=s[i].num;//加上自己
a[i]=s[i].y ;//保存右端点
ans=max(f[i],ans);//取最大值
}
cout<<ans;
}
谢谢