Submission #1209383

#TimeUsernameProblemLanguageResultExecution timeMemory
1209383simona1230Comparing Plants (IOI20_plants)C++20
44 / 100
464 ms11368 KiB
#include "plants.h" #include <bits/stdc++.h> #define pb push_back using namespace std; const int maxn=2*1e5+5; struct node { int vl,id,lz; node() {} node(int _vl,int _id,int _lz) { vl=_vl; id=_id; lz=_lz; } }; node t[4*maxn]; node pull(node lf,node rt) { node h=lf; if(lf.vl>rt.vl)h=rt; return h; } void push(int i,int l,int r) { t[i].vl+=t[i].lz; if(l!=r) { t[i*2].lz+=t[i].lz; t[i*2+1].lz+=t[i].lz; } t[i].lz=0; } void updi(int i,int l,int r,int id,int vl) { push(i,l,r); if(l==r) { t[i].vl=vl; t[i].id=l; return; } int m=(l+r)/2; push(i*2,l,m); push(i*2+1,m+1,r); if(id<=m)updi(i*2,l,m,id,vl); else updi(i*2+1,m+1,r,id,vl); t[i]=pull(t[i*2],t[i*2+1]); } void updr(int i,int l,int r,int ql,int qr) { push(i,l,r); if(ql>qr)return; if(ql<=l&&r<=qr) { t[i].lz-=1; push(i,l,r); return; } int m=(l+r)/2; updr(i*2,l,m,ql,min(qr,m)); updr(i*2+1,m+1,r,max(m+1,ql),qr); t[i]=pull(t[i*2],t[i*2+1]); } node query(int i,int l,int r,int ql,int qr) { push(i,l,r); if(ql>qr)return {maxn,0,0}; if(ql<=l&&r<=qr)return t[i]; int m=(l+r)/2; return pull(query(i*2,l,m,ql,min(qr,m)),query(i*2+1,m+1,r,max(m+1,ql),qr)); } int g[maxn]; int sz,num; void init(int k, std::vector<int> r) { num=r.size(); sz=r.size(); for(int i=0; i<r.size(); i++) updi(1,0,sz-1,i,r[i]); while(1) { stack<int> s; node x=query(1,0,sz-1,0,sz-1); if(x.vl!=0)break; s.push(x.id); while(s.size()) { int y=s.top(); node z=query(1,0,sz-1,max(0,y-k+1),y-1); if(y-k+1<0)z=pull(z,query(1,0,sz-1,sz+(y-k+1),sz-1)); if(z.vl==0)s.push(z.id); else { g[y]=num--; updr(1,0,sz-1,max(0,y-k+1),y-1); if(y-k+1<0) updr(1,0,sz-1,sz+(y-k+1),sz-1); updi(1,0,sz-1,y,maxn); s.pop(); } } } /*for(int i=0;i<r.size();i++) cout<<g[i]<<" "; cout<<endl;*/ } int compare_plants(int x, int y) { if(g[x]<g[y])return -1; return 1; }
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...