Submission #1289173

#TimeUsernameProblemLanguageResultExecution timeMemory
1289173kawhietWall (IOI14_wall)C++20
100 / 100
548 ms63304 KiB
#include <bits/stdc++.h> #include "wall.h" using namespace std; constexpr int N = 2e6; int mn[N * 4], mx[N * 4]; bool has[N * 4]; void push(int id, int tl, int tr) { if (!has[id] || tl == tr) return; int x = (id << 1) + 1, y = x + 1, tm = (tl + tr) >> 1; has[x] = has[y] = 1; mx[x] = mx[y] = mx[id]; mn[x] = mn[y] = mn[id]; has[id] = 0; } void add(int id, int tl, int tr, int l, int r, int h) { push(id, tl, tr); if (r < tl || tr < l || mn[id] >= h) return; if (l <= tl && tr <= r && mx[id] <= h) { has[id] = 1; mn[id] = mx[id] = max(h, mx[id]); push(id, tl, tr); return; } int x = (id << 1) + 1, y = x + 1, tm = (tl + tr) >> 1; add(x, tl, tm, l, r, h); add(y, tm + 1, tr, l, r, h); mn[id] = min(mn[x], mn[y]); mx[id] = max(mx[x], mx[y]); } void remove(int id, int tl, int tr, int l, int r, int h) { push(id, tl, tr); if (r < tl || tr < l || mx[id] <= h) return; if (l <= tl && tr <= r && mn[id] >= h) { has[id] = 1; mn[id] = mx[id] = min(h, mn[id]); push(id, tl, tr); return; } int x = (id << 1) + 1, y = x + 1, tm = (tl + tr) >> 1; remove(x, tl, tm, l, r, h); remove(y, tm + 1, tr, l, r, h); mn[id] = min(mn[x], mn[y]); mx[id] = max(mx[x], mx[y]); } int get(int id, int tl, int tr, int i) { push(id, tl, tr); if (tl == tr) { return mx[id]; } int x = (id << 1) + 1, y = x + 1, tm = (tl + tr) >> 1; if (i <= tm) { return get(x, tl, tm, i); } else { return get(y, tm + 1, tr, i); } } void buildWall(int n, int k, int op[], int left[], int right[], int height[], int finalHeight[]){ for (int i = 0; i < k; i++) { int t = op[i], l = left[i], r = right[i], h = height[i]; if (t == 1) { add(0, 0, n - 1, l, r, h); } else { remove(0, 0, n - 1, l, r, h); } } for (int i = 0; i < n; i++) { finalHeight[i] = get(0, 0, n - 1, i); } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...