和之前一个尼克的任务一样
f[i+1]=max(f[i],f[i+1]);
f[a[i][j]+1]=max(f[a[i][j]+1],f[i]+a[i][j]−i+1);
#include<iostream>
#include<cstring>
#include<vector>
#include<cstdio>
using namespace std;
int ans,m,n,f[3010509];
vector <int>a[3010999];
int main(){
memset(f,128,sizeof f);
scanf("%d",&n);
for(int i=1,x,y;i<=n;i++)
{
scanf("%d%d",&x,&y);
m=max(m,y);
a[x].push_back(y);
}
f[1]=0;
for(int i=1;i<=m;i++)
{ f[i+1]=max(f[i],f[i+1]);
if(a[i].size())
for(int j=0;j<a[i].size();j++){
f[a[i][j]+1]=max(f[a[i][j]+1],f[i]+a[i][j]-i+1);
}
}
printf("%d",f[m+1]);
}