#include <bits/stdc++.h>
using namespace std;
#define append push_back
#define int long long
const int N=4e5+10,LG=21;
int mod=998244353;
vector<pair<int,int>>g[N];
int dp[N];
void solve(int tst){
int n;
cin>>n;
int ans=0;
set<pair<int,int>>s;
dp[0]=1;
for(int i=0;i<n;i++){
int l,r;
cin>>l>>r;
for(auto [ind,val]:g[i]){
auto it=s.lower_bound({ind,0});
if(it!=s.end()){
val=max(val,(*it).second);
}
s.insert({ind,val});
}
int x=i-l-1,y=i+1+r;
dp[i]=1;
auto it=s.lower_bound({x+1,0});
if(it!=s.begin()) --it;
else it=s.end();
if(it!=s.end()){
dp[i]+=(*it).second;
}
if((*s.begin()).first<=x) dp[i]=max(dp[i],(*s.begin()).second+1);
it=s.lower_bound({i,0});
if(it!=s.end() and (*it).first==i) s.erase(it);
g[y].append({i,dp[i]});
ans=max(ans,dp[i]);
}
cout<<ans<<endl;
}
signed main(){
ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
int t = 1;
// cin >> t;
for(int i=1;i<=t;i++)
solve(i);
}
# | 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... |