Submission #409431

#TimeUsernameProblemLanguageResultExecution timeMemory
409431MDarioWall (IOI14_wall)C++11
100 / 100
1010 ms107124 KiB
#include "wall.h" #include<bits/stdc++.h> using namespace std; typedef long long ll; #define F first #define S second pair<int, int> st[8000001]; int r[2000001]; void lazy(ll xf, ll lf, ll rf){ if(lf==rf)return; st[xf*2].F=min(st[xf*2].F, st[xf].S); st[xf*2].F=max(st[xf*2].F, st[xf].F); st[xf*2].S=max(st[xf*2].F, min(st[xf*2].S, st[xf].S)); st[xf*2+1].F=min(st[xf*2+1].F, st[xf].S); st[xf*2+1].F=max(st[xf*2+1].F, st[xf].F); st[xf*2+1].S=max(st[xf*2+1].F, min(st[xf*2+1].S, st[xf].S)); st[xf]={0, 1000000}; return; } void update1(int xf, int lf, int rf, int ol, int od, int v){ lazy(xf, lf, rf); if(rf<ol||lf>od)return; if(ol<=lf&&rf<=od){ if(lf==rf){ st[xf].F=max(st[xf].F, v); st[xf].S=max(st[xf].S, v); return; } st[xf].F=v; lazy(xf, lf, rf); return; } update1(xf*2, lf, (lf+rf)/2, ol, od, v); update1(xf*2+1, (lf+rf)/2+1, rf, ol, od, v); return ; } void update2(int xf, int lf, int rf, int ol, int od, int v){ lazy(xf, lf, rf); if(rf<ol||lf>od)return; if(ol<=lf&&rf<=od){ if(lf==rf){ st[xf].F=min(st[xf].F, v); st[xf].S=min(st[xf].S, v); return; } st[xf].S=v; lazy(xf, lf, rf); return; } update2(xf*2, lf, (lf+rf)/2, ol, od, v); update2(xf*2+1, (lf+rf)/2+1, rf, ol, od, v); return ; } void rbuild(int xf, int lf, int rf){ lazy(xf, lf, rf); if(lf==rf){ r[lf]=st[xf].F; return; } rbuild(xf*2, lf, (lf+rf)/2); rbuild(xf*2+1, (lf+rf)/2+1, rf); return ; } void buildWall(int n, int k, int op[], int left[], int right[], int height[], int finalHeight[]){ for(int i=0; i<=4*n; i++)st[i].S=1000000; for(int i=0; i<k; i++){ if(op[i]==1)update1(1, 1, n, left[i]+1, right[i]+1, height[i]); else update2(1, 1, n, left[i]+1, right[i]+1, height[i]); } rbuild(1, 1, n); for(int i=0; i<n; i++){ finalHeight[i]=r[i+1]; } 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...