Submission #39675

#TimeUsernameProblemLanguageResultExecution timeMemory
39675deletendWall (IOI14_wall)C++14
0 / 100
0 ms49080 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<int, int> P; typedef pair<ll, ll> LP; #define pb push_back #define rep(i, a, n) for(int i = (a); i < (n); i++) #define mod (ll)(1e9+7) __attribute__((constructor)) void initial() { cin.tie(0); ios::sync_with_stdio(false); } class SegTree { private: public: int dat[2 * 2000000 - 1]; bool d; void query(int a, int b, int k, int l, int r, int nk); void update(int k, int a); }; SegTree mx, mn; int n = 1, plus[2 * 2000000 - 1]; void SegTree::update(int k, int a) { dat[k] = a; while(k > 0) { k = (k - 1) / 2; if(d) dat[k] = max(dat[k * 2 + 1], dat[k * 2 + 2]); else dat[k] = min(dat[k * 2 + 1], dat[k * 2 + 2]); } } void SegTree::query(int a, int b, int k, int l, int r, int nk) { if(r <= a || b <= l) return; if(a <= l && r <= b) { if(d) { if(dat[k] <= nk) { mx.update(k, nk); mn.update(k, nk); }else if(mn.dat[k] < nk) { query(a, b, k * 2 + 1, l, (l + r) / 2, nk); query(a, b, k * 2 + 2, (l + r) / 2, r, nk); } }else { if(dat[k] >= nk) { mx.update(k, nk); mn.update(k, nk); }else if(mx.dat[k] > nk) { query(a, b, k * 2 + 1, l, (l + r) / 2, nk); query(a, b, k * 2 + 2, (l + r) / 2, r, nk); } } }else { query(a, b, k * 2 + 1, l, (l + r) / 2, nk); query(a, b, k * 2 + 2, (l + r) / 2, r, nk); } } void solve(int k, int l, int r, int f[]) { if(mx.dat[k] == mn.dat[k]) { rep(i, l, r) { f[i] = mx.dat[k]; } }else { solve(k * 2 + 1, l, (l + r) / 2, f); solve(k * 2 + 1, (l + r) / 2, r, f); } } void buildWall(int n_, int k, int op[], int left[], int right[], int height[], int finalHeight[]) { while(n < n_) n *= 2; mx.d = 1, mn.d = 0; rep(i, 0, n * 2 - 1) { mx.dat[i] = 0; mn.dat[i] = 0; } rep(i, 0, k) { if(op[i] == 1) mx.query(left[i], right[i], 0, 0, n, height[i]); else mn.query(left[i], right[i], 0, 0, n, height[i]); } solve(0, 0, n, finalHeight); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...