dp[i]表示从开始到i时间内最多能选取的部分和
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int dp[3000010];
struct node
{
int x,y;
}e[200010];
bool cmp(node a,node b)
{
if(a.x!=b.x) return a.x<b.x;
return a.y<b.y;
}
int main()
{
int n;scanf("%d",&n);
int maxx=0;
for(int i=0;i<n;i++)
{
scanf("%d%d",&e[i].x,&e[i].y);
if(e[i].y>maxx) maxx=e[i].y;
}
sort(e,e+n,cmp);
for(int i=0;i<n;i++)
{
int x=e[i].x,y=e[i].y;
dp[y]=max(dp[y],dp[x-1]+y-x+1);
for(int j=y+1;j<maxx;j++)
dp[j]=max(dp[y],dp[j]);
// printf("%d %d dp:%d\n",x,y,dp[y]);
}
cout<<dp[maxx];
return 0;
}