#include <bits/stdc++.h>
using namespace std;
const int N=5e5;
int n;
int l[N];
int r[N];
int dp[N];
int fw[N];
vector<int> g[N];
void update(int pos){
    for(;pos<N;pos+=(pos&-pos)){
        fw[pos]++;
    }
}
int get(int pos){
    int answ=0ll;
    for(;pos>0;pos-=(pos&-pos)){
        answ+=fw[pos];
    }
    return answ;
}
int get(int l,int r){
    return get(r)-get(l-1);
}
int main()
{
    cin>>n;
    for(int i=1;i<=n;++i){
        cin>>l[i]>>r[i];
    }
    for(int i=1;i<=n;++i){
        for(auto j:g[i]){
            update(j);
        }
        int x=0;
        for(int j=i-l[i]-1;j>0;--j){
            if(j+r[j]+1<=i){
                x=j;
                break;
            }
        }
        dp[i]=max(dp[i-1],dp[x]+1);
        g[i+r[i]+1].push_back(i);
    }
    cout<<dp[n];
    return 0;
}
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... |