Submission #703330

#TimeUsernameProblemLanguageResultExecution timeMemory
703330jamezzz벽 (IOI14_wall)C++17
61 / 100
1101 ms262144 KiB
#include "wall.h" #include <bits/stdc++.h> using namespace std; typedef pair<int,int> ii; #define all(x) x.begin(),x.end() #define maxn 2000005 #define INF 1023456789 struct node{ int s,e,m,mn,mx,lzmn,lzmx;//value has to between [mn, mx]; node *l,*r; node(int _s,int _e){ s=_s,e=_e,m=(s+e)>>1,mn=0,mx=INF,lzmn=0,lzmx=INF; if(s!=e)l=new node(s,m),r=new node(m+1,e); } ii join(ii l,ii r){ auto[lmn,lmx]=l; auto[rmn,rmx]=r; if(max(lmn,rmn)<=min(lmx,rmx))return {max(lmn,rmn),min(lmx,rmx)}; else if(rmx<=lmn)return {rmx,rmx}; else return {rmn,rmn}; } void ppo(){ tie(mn,mx)=join({mn,mx},{lzmn,lzmx}); if(s!=e){ tie(l->lzmn,l->lzmx)=join({l->lzmn,l->lzmx},{lzmn,lzmx}); tie(r->lzmn,r->lzmx)=join({r->lzmn,r->lzmx},{lzmn,lzmx}); } lzmn=0,lzmx=INF; } void up(int x,int y,int type,int h){ ppo(); if(s==x&&e==y){ if(type==1)tie(lzmn,lzmx)=join({lzmn,lzmx},{h,INF}); else tie(lzmn,lzmx)=join({lzmn,lzmx},{0,h}); return; } if(y<=m)l->up(x,y,type,h); else if(x>m)r->up(x,y,type,h); else{ l->up(x,m,type,h); r->up(m+1,y,type,h); } l->ppo(),r->ppo(); tie(mn,mx)=join({l->mn,l->mx},{r->mn,r->mx}); } ii qry(int x){ ppo(); if(s==x&&e==x)return {mn,mx}; if(x<=m)return l->qry(x); else return r->qry(x); } }*rt; void buildWall(int n,int k,int op[],int left[],int right[],int height[],int finalHeight[]){ rt=new node(0,n-1); for(int i=0;i<k;++i){ rt->up(left[i],right[i],op[i],height[i]); } for(int i=0;i<n;++i){ finalHeight[i]=rt->qry(i).first; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...