由于存在区间包含的关系,被包含的小区间满足时大区间也一定满足。
把所有区间按照右端点从大到小排序。
如果右端点相等,按照左端点从大到小排
不妨想想,取哪个点图片说明
由于右端点是从小到大,可以取最上面那个区间的右端点
1.如果后面区间的左端点小于该区间,那么就是包含,就一定取得到
2.如果后面区间的左端点大于该区间,依然被取到
此时取得的区间最多

#include <bits/stdc++.h>
using namespace std;
const int maxn=5e4+7;
const int inf=0x3f3f3f3f;
struct node {
  int x,y;
}a[maxn];
bool cmp(node w,node q)
{
    if (w.y==q.y)
        return w.x>q.x;
    return w.y<q.y;
}
int  main()
{
    int n;
    cin>>n;
    for (int i=0;i<n;++i)
    {
        cin>>a[i].x;
        int m;
        cin>>m;
        a[i].y=m+a[i].x;
    }
    sort(a,a+n,cmp);
    int r=a[0].y;
    int cnt=1;
    for (int i=1;i<n;++i)
    {
        if ((r-1)>=a[i].x&&(r-1)<=a[i].y)///判断1和2所包含的情况
        {
           continue;
        }
        ++cnt;
        r=a[i].y;///更新
    }
    cout<<cnt<<endl;

  return 0;
}