#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;
set<int> st;
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;
int L=1;
int R=i-l[i]-1;
while(L<=R){
int mid=(L+R)/2;
if(get(mid,i-l[i]-1)){
x=mid;
L=mid+1;
}
else{
R=mid-1;
}
}
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... |