Submission #1233623

#TimeUsernameProblemLanguageResultExecution timeMemory
1233623coco2311Bouquet (EGOI24_bouquet)C++17
100 / 100
66 ms6848 KiB
#include <iostream> #include <cmath> #include <queue> using namespace std; #define f first #define s second int main(){ ios::sync_with_stdio(false);cin.tie(0);cout.tie(0); // freopen("input.in","r",stdin); int N; cin>>N; int dp[N]; int zp=1<<(int)ceil(log2(N)); int arb[2*zp]; pair<int,int> fl[N]; for(int i=0;i<N;i++){ cin>>fl[i].f>>fl[i].s; } for(int i=0;i<2*zp;i++){ arb[i]=0; } priority_queue<pair<int,int>> pq; // end flower index int id,v,pos; int l,r; for(int i=0;i<N;i++){ if(i-fl[i].f<=0){ dp[i]=1; } else{ while(!pq.empty() && (pq.top().f)*-1<i){ id=pq.top().s; v=dp[id]; pos=id + zp; arb[pos]=max(arb[pos],v); pos/=2; while(pos>=1){ arb[pos]=max(arb[pos+pos],arb[pos+pos+1]); pos/=2; } pq.pop(); } v=0; l=zp; r=zp+i-fl[i].f-1; while(l<=r){ if(l%2==1){ v=max(v,arb[l]); l++; } if(r%2==0){ v=max(v,arb[r]); r--; } r/=2; l/=2; } dp[i]=1+v; } pq.push({-1*(i+fl[i].s),i}); } int m=0; for(int i=0;i<N;i++){ m=max(m,dp[i]); } cout<<m; }
#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...