#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],val[N],tree[N<<2];
int get(int l,int r,int s,int a,int b){
if(r<a or l>b) return 0;
if(a<=l and r<=b) return tree[s];int m=(l+r)>>1;
return max(get(l,m,s*2,a,b),get(m+1,r,s*2+1,a,b));
}
void upd(int l,int r,int s,int a,int b){
if(r<a or l>a) return;
if(l==r){
tree[s]=b;return;
}
int m=(l+r)>>1;
upd(l,m,s*2,a,b);
upd(m+1,r,s*2+1,a,b);
tree[s]=max(tree[s*2],tree[s*2+1]);
}
void solve(int tst){
int n;
cin>>n;
int ans=0;
for(int i=1;i<=n;i++) dp[i]=1;
for(int i=1;i<=n;i++){
int l,r;
cin>>l>>r;
for(auto [ind,v]:g[i]){
val[ind]=v;
upd(1,n,1,ind,v);
}
int x=max(0ll,i-l-1),y=i+1+r;
dp[i]=get(1,n,1,1,x)+1;
if(y<=n) g[y].append({i,dp[i]});
ans=max(ans,dp[i]);
val[i]=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... |