Submission #1019440

#TimeUsernameProblemLanguageResultExecution timeMemory
1019440n3rm1nWall (IOI14_wall)C++17
100 / 100
505 ms138560 KiB
#include <bits/stdc++.h> #define endl '\n' using namespace std; const int MAXN = 2e6 + 10; struct node { int minval, maxval, lazy; node() { minval = 0; maxval = 0; lazy = -1; } }; node t[MAXN * 4]; void push_lazy(int i, int l, int r) { if(t[i].lazy == -1)return; t[i].minval = t[i].lazy; t[i].maxval = t[i].lazy; if(l != r) { t[2*i].lazy = t[i].lazy; t[2*i+1].lazy = t[i].lazy; } t[i].lazy = -1; } int ql, qr, x; void upd_minimum(int i, int l, int r) { push_lazy(i, l, r); if(ql > r || qr < l)return; if(t[i].maxval <= x)return; if(ql <= l && r <= qr) { //if(t[i].maxval <= x)return; if(t[i].minval > x) { t[i].lazy = x; push_lazy(i, l, r); return; } // else return; } if(l == r)return; int mid = (l + r)/2; upd_minimum(2*i, l, mid); upd_minimum(2*i+1, mid+1, r); t[i].minval = min(t[2*i].minval, t[2*i+1].minval); t[i].maxval = max(t[2*i].maxval, t[2*i+1].maxval); } void upd_maximum(int i, int l, int r) { push_lazy(i, l, r); if(ql > r || qr < l)return; if(t[i].minval >= x)return; if(ql <= l && r <= qr) { if(t[i].maxval < x) { t[i].lazy = x; push_lazy(i, l, r); return; } //else return; } if(l == r)return; int mid = (l + r)/2; upd_maximum(2*i, l, mid); upd_maximum(2*i+1, mid+1, r); t[i].minval = min(t[2*i].minval, t[2*i+1].minval); t[i].maxval = max(t[2*i].maxval, t[2*i+1].maxval); } int h[MAXN]; void build(int i, int l, int r) { push_lazy(i, l, r); if(l == r) { h[l] = t[i].minval; return; } int mid = (l + r)/2; build(2*i, l, mid); build(2*i+1, mid+1, r); } void buildWall(int n, int k, int op[], int left[], int right[], int height[], int finalHeight[]) { for (int i = 0; i < k; ++ i) { ql = left[i] + 1; qr = right[i] + 1; x = height[i]; if(op[i] == 1) upd_maximum(1, 1, n); else upd_minimum(1, 1, n); } build(1, 1, n); for (int i = 1; i <= n; ++ i) finalHeight[i-1] = h[i]; 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...