이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include<bits/stdc++.h>
using namespace std;
#define itn long long
#define int long long
#define ff first
#define ss second
#define pb push_back
const int N=3e5+5;
int l[N],r[N];
int dp[N];
int st[4*N];
void update(int node, int L, int R, int idx, int val){
if(L==R){
st[node]=val;
return;
}
int mid=(L+R)/2;
if(L<=idx and idx<=mid)update(node*2,L,mid,idx,val);
else update(node*2+1,mid+1,R,idx,val);
st[node]=max(st[node*2],st[node*2+1]);
}
int find(int node, int L, int R, int l, int r){
if(l<1 or r<1)return 0;
if(l<=L and R<=r) return st[node];
if (l > R or r < L) return 0;
int mid=(L+R)/2;
return max(find(2*node,L,mid,l,r),find(2*node+1,mid+1,R,l,r));
}
vector<int>pst[N];
signed main(){
int n;
cin>>n;
for(int i=1;i<=n;i++){
cin>>l[i]>>r[i];
}
int ans=0;
for(int i=1;i<=n;i++){
for(auto a:pst[i]){
update(1,1,n,a,dp[a]);
}
dp[i]=find(1,1,n,1,i-l[i]-1)+1;
pst[i+r[i]+1].pb(i);
ans=max(ans,dp[i]);
}
cout<<ans;
}
# | 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... |