Submission #1133345

#TimeUsernameProblemLanguageResultExecution timeMemory
1133345LuvidiWall (IOI14_wall)C++20
100 / 100
460 ms88960 KiB
#include <bits/stdc++.h> #include "wall.h" using namespace std; const int maxn=2e6; pair<int,int> seg[4*maxn]; pair<int,int> mrg(pair<int,int> p1,pair<int,int> p2){ auto [l1,r1]=p1; auto [l2,r2]=p2; return {min(max(l1,l2),r2),min(max(r1,l2),r2)}; } void prop(int v){ seg[2*v+1]=mrg(seg[2*v+1],seg[v]); seg[2*v+2]=mrg(seg[2*v+2],seg[v]); seg[v]={0,1e9}; } void upd(int v,int l,int r,int l2,int r2,pair<int,int> p){ if(l>r2||r<l2)return; if(l2<=l&&r<=r2){ seg[v]=mrg(seg[v],p); return; } prop(v); int m=(l+r)/2; upd(2*v+1,l,m,l2,r2,p); upd(2*v+2,m+1,r,l2,r2,p); } void ans(int v,int l,int r,int a[]){ if(l==r){ a[l]=seg[v].first; }else{ prop(v); int m=(l+r)/2; ans(2*v+1,l,m,a); ans(2*v+2,m+1,r,a); } } void buildWall(int n, int k, int op[], int left[], int right[], int height[], int finalHeight[]){ for(int i=0;i<4*n;i++)seg[i]={0,1e9}; for(int i=0;i<k;i++){ if(op[i]==1)upd(0,0,n-1,left[i],right[i],{height[i],1e9}); else upd(0,0,n-1,left[i],right[i],{0,height[i]}); } ans(0,0,n-1,finalHeight); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...