Submission #1161616

#TimeUsernameProblemLanguageResultExecution timeMemory
1161616I_FloPPed21Wall (IOI14_wall)C++20
0 / 100
103 ms8264 KiB
#include <iostream> #include "wall.h" using namespace std; const int N=2e6+5; struct seg { int val_min,val_max; } aint[4*N]; void aplica(int nod,seg x) { aint[nod].val_min=max(aint[nod].val_min,x.val_min); aint[nod].val_max=max(aint[nod].val_max,aint[nod].val_min); aint[nod].val_max=min(aint[nod].val_max,x.val_max); aint[nod].val_min=min(aint[nod].val_min,aint[nod].val_max); } void propaga(int nod) { aplica(nod*2,aint[nod]); aplica(nod*2+1,aint[nod]); aint[nod].val_min=0; aint[nod].val_max=1e9+2; } void update(int nod,int st,int dr,int l,int r,seg x) { if(l<=st&&dr<=r) { aplica(nod,x); } else if(l>dr||st>r) return ; else { int mij=(st+dr)/2; propaga(nod); update(nod*2,st,mij,l,r,x); update(nod*2+1,mij+1,dr,l,r,x); } } seg query(int nod,int st,int dr,int poz) { if(st==dr) return aint[nod]; else { int mij=(st+dr)/2; if(poz<=mij) return query(nod*2,st,mij,poz); else return query(nod*2+1,mij+1,dr,poz); } } const int inf=1e9+2; void buildWall(int n, int k, int op[], int left[], int right[], int height[], int finalHeight[]) { for(int i=1;i<=4*n;i++) { aint[i].val_min=0; aint[i].val_max=1e9+2; } for(int i=0; i<k; i++) { left[i]++; right[i]++; if(op[i]==1) { update(1,1,n,left[i],right[i], {height[i],inf}); } else update(1,1,n,left[i],right[i], {0,height[i]}); } for(int i=0; i<n; i++) { finalHeight[i]=query(1,1,n,i+1).val_min; } return; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...