Submission #130504

#TimeUsernameProblemLanguageResultExecution timeMemory
130504antimirageWall (IOI14_wall)C++14
100 / 100
1108 ms99528 KiB
#include "wall.h" #include <bits/stdc++.h> using namespace std; const int N = 2e6 + 5; int mx[N * 4], mn[N * 4], n; void upd (int v, int val, int t) { if (t == 1) { mn[v] = max(mn[v], val); mx[v] = max(mx[v], val); } else { mn[v] = min(mn[v], val); mx[v] = min(mx[v], val); } } void push (int v) { upd(v + v, mx[v], 1); upd(v + v, mn[v], 2); upd(v + v + 1, mx[v], 1); upd(v + v + 1, mn[v], 2); mx[v] = 0; mn[v] = 1e9; } void update (int l, int r, int val, int t, int v = 1, int tl = 1, int tr = n) { if (l > tr || tl > r) return; if (l <= tl && tr <= r) { upd(v, val, t); return; } push(v); int tm = (tl + tr) >> 1; update(l, r, val, t, v + v, tl, tm); update(l, r, val, t, v + v + 1, tm + 1, tr); } int get (int pos, int v = 1, int tl = 1, int tr = n) { if (tl == tr) return mx[v]; push(v); int tm = (tl + tr) >> 1; if (pos <= tm) return get(pos, v + v, tl, tm); return get(pos, v + v + 1, tm + 1, tr); } void buildWall(int N, int k, int op[], int l[], int r[], int a[], int ans[]) { n = N; memset(mn, 0x3f3f3f3f, sizeof(mn)); memset(mx, 0, sizeof(mx)); for (int i = 0; i < k; i++) { update( l[i] + 1, r[i] + 1, a[i], op[i] ); } for (int i = 0; i < n; i++) { ans[i] = get(i + 1); } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...