Submission #991962

#TimeUsernameProblemLanguageResultExecution timeMemory
991962phoenixWall (IOI14_wall)C++17
100 / 100
594 ms77868 KiB
#include "wall.h" #include <bits/stdc++.h> using namespace std; const int N = (1 << 21); const int INF = 1e9; int tr_min[2 * N]; int tr_max[2 * N]; void setpush(int v, int l, int r) { tr_min[v] = max(tr_min[v], l); tr_min[v] = min(tr_min[v], r); tr_max[v] = max(tr_max[v], l); tr_max[v] = min(tr_max[v], r); } void push(int v) { if (v >= N) return; setpush(2 * v, tr_min[v], tr_max[v]); setpush(2 * v + 1, tr_min[v], tr_max[v]); } void update(int ql, int qr, int lb, int rb, int l = 0, int r = N - 1, int v = 1) { if (r < ql || l > qr) return; if (ql <= l && r <= qr) { setpush(v, lb, rb); return; } push(v); int mid = (l + r) / 2; update(ql, qr, lb, rb, l, mid, 2 * v); update(ql, qr, lb, rb, mid + 1, r, 2 * v + 1); tr_min[v] = min(tr_min[2 * v], tr_min[2 * v + 1]); tr_max[v] = max(tr_max[2 * v], tr_max[2 * v + 1]); } int arr[N]; void construct(int l = 0, int r = N - 1, int v = 1) { if (l == r) { arr[l] = tr_min[v]; return; } push(v); int mid = (l + r) / 2; construct(l, mid, 2 * v); construct(mid + 1, r, 2 * v + 1); } void buildWall(int n, int k, int op[], int left[], int right[], int height[], int finalHeight[]){ for (int i = 0; i < k; i++) { if (op[i] == 1) { update(left[i], right[i], height[i], INF); } else { update(left[i], right[i], 0, height[i]); } } construct(); for (int i = 0; i < n; i++) finalHeight[i] = arr[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...