Submission #1189539

#TimeUsernameProblemLanguageResultExecution timeMemory
1189539prideliqueeeBouquet (EGOI24_bouquet)C++20
24 / 100
87 ms13320 KiB
#include<bits/stdc++.h> using namespace std; #define int long long #define f first #define s second pair<int,int> mx[800000]; int ri[200010]; void update(int l,int r,int i,int index) { if(index<l||index>r) return; if(l==r) { mx[i]={ri[l],ri[l]}; return; } int mid=(l+r)/2; update(l,mid,i*2,index); update(mid+1,r,i*2+1,index); mx[i]={min(mx[i*2].f,mx[i*2+1].f),mx[i*2+1].s}; } int sum; void query(int l,int r,int i,int ql,int qr,int val) { if(qr<l||ql>r) return; if(ql<=l&&qr>=r) { if(mx[i].s<=val) { sum=max(sum,r); return; } } if(mx[i].f>val) return; int mid=(l+r)/2; if(mx[i*2+1].f<=val) query(mid+1,r,i*2+1,ql,qr,val); if(mx[i*2].f<=val) query(l,mid,i*2,ql,qr,val); } signed main() { ios_base::sync_with_stdio(0); cin.tie(0); int n; cin>>n; int li[n+1]; for(int i=1;i<=n;i++) { int l,r; cin>>l>>r; li[i]=max((int)0,i-l-1); ri[i]=min(n+1,i+r+1); int j=li[i]; update(0,n,1,i); sum=0; query(0,n,1,0,li[i],i); li[i]=sum; } int ans[n+1]; memset(ans,0,sizeof ans); for(int i=1;i<=n;i++) { ans[i]=ans[i-1]; int d=li[i]; ans[i]=max(ans[i],ans[d]+1); //cout<<ri[i]<<" "<<li[i]<<" "<<ans[i]<<endl; } cout<<ans[n]; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...