Submission #1240844

#TimeUsernameProblemLanguageResultExecution timeMemory
1240844aren_danceBouquet (EGOI24_bouquet)C++20
24 / 100
134 ms21600 KiB
#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 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...