Submission #847850

#TimeUsernameProblemLanguageResultExecution timeMemory
847850Derek0Wall (IOI14_wall)C++17
100 / 100
552 ms108304 KiB
#include "wall.h" #include <bits/stdc++.h> using namespace std; #define overload4(a, b, c, d, name, ...) name #define rep1(i, n) for(ll i = 0; i < (n); ++i) #define rep2(i, a, b) for(ll i = (a); i < (b); ++i) #define rep3(i, a, b, c) for(ll i = (a); i < (b); i += (c)) #define rep(...) overload4(__VA_ARGS__, rep3, rep2, rep1)(__VA_ARGS__) #define per1(i, n) for(ll i = (n) - 1; i >= 0; --i) #define per2(i, a, b) for(ll i = (b) - 1; i >= a; --i) #define per3(i, a, b, c) for(ll i = (b) - 1; i >= (a); i -= (c)) #define per(...) overload4(__VA_ARGS__, per3, per2, per1)(__VA_ARGS__) #define pb emplace_back #define lb(v,k) (ll) (lower_bound(all(v), (k)) - v.begin()) #define ub(v,k) (ll) (upper_bound(all(v), (k)) - v.begin()) #define all(a) a.begin(),a.end() #define fi first #define se second #define PQ(T) priority_queue<T> #define SPQ(T) priority_queue<T, vector<T>, greater<T>> typedef long long ll; typedef pair<ll,ll> P; using vi = vector<ll>; using vvi = vector<vi>; using vvvi = vector<vvi>; using vvvvi = vector<vvvi>; using vp = vector<P>; using vvp = vector<vp>; constexpr int inf = (int) 1e9; constexpr int _ = (int) 1e7; ll mx[_], mn[_]; vi res; void applyMax(int p, int h) { mx[p] = max<ll>(mx[p], h); mn[p] = max<ll>(mn[p], h); } void applyMin(int p, int h) { mx[p] = min<ll>(mx[p], h); mn[p] = min<ll>(mn[p], h); } void push(int p) { applyMin(2 * p, mn[p]); applyMin(2 * p + 1, mn[p]); applyMax(2 * p, mx[p]); applyMax(2 * p + 1, mx[p]); mx[p] = 0; mn[p] = inf; } void modify(int p, int l, int r, int ql, int qr, int h, int t) { if (r < ql || l > qr) return; if (ql <= l && r <= qr) { if (t == 1) applyMax(p, h); else applyMin(p, h); return; } int m = (l + r) / 2; push(p); modify(2 * p, l, m, ql, qr, h, t); modify(2 * p + 1, m + 1, r, ql, qr, h, t); } void traversal(int p, int l, int r) { if (l == r) { res.pb(mx[p]); return; } int m = (l + r) / 2; push(p); traversal(2 * p, l, m); traversal(2 * p + 1, m + 1, r); } void buildWall(int n, int k, int t[], int l[], int r[], int h[], int ans[]) { rep(i, k) modify(1, 0, n - 1, l[i], r[i], h[i], t[i]); traversal(1, 0, n - 1); rep(i, n) ans[i] = res[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...