Submission #919839

#TimeUsernameProblemLanguageResultExecution timeMemory
919839MackerWall (IOI14_wall)C++17
100 / 100
598 ms86104 KiB
#include <wall.h> #include <bits/stdc++.h> using namespace std; typedef long long ll; #define all(v) v.begin(), v.end() #define smin(a, b) a = min(a, b) #define smax(a, b) a = max(a, b) struct node{ int mx = INT_MAX, mn = 0; int val = 0; }; vector<node> st; int len = 1; void prop(int i){ node& n = st[i], &l = st[i * 2], &r = st[i * 2 + 1]; smin(l.mx, n.mx); smax(l.mx, n.mn); smax(l.mn, n.mn); smin(l.mn, n.mx); smin(l.val, n.mx); smax(l.val, n.mn); smin(r.mx, n.mx); smax(r.mx, n.mn); smax(r.mn, n.mn); smin(r.mn, n.mx); smin(r.val, n.mx); smax(r.val, n.mn); n.mx = INT_MAX; n.mn = 0; } void upd(int l, int r, int mx, int mn, int i = 1, int s = 0, int e = len){ if(e <= l || s >= r) return; if(l <= s && e <= r){ smin(st[i].mx, mx); smax(st[i].mx, mn); smax(st[i].mn, mn); smin(st[i].mn, mx); smin(st[i].val, mx); smax(st[i].val, mn); return; } prop(i); upd(l, r, mx, mn, i * 2, s, (s + e) / 2); upd(l, r, mx, mn, i * 2 + 1, (s + e) / 2, e); } void buildWall(int n, int k, int op[], int left[], int right[], int height[], int finalHeight[]){ while(len < n) len *= 2; st.resize(2 * len); for (int i = 0; i < k; i++) { int mx = INT_MAX, mn = 0; if(op[i] == 1) mn = height[i]; else mx = height[i]; upd(left[i], right[i] + 1, mx, mn); } for (int i = 1; i < len; i++) { prop(i); } for (int i = len; i < len + n; i++) { finalHeight[i - len] = st[i].val; } 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...