Submission #249531

#TimeUsernameProblemLanguageResultExecution timeMemory
249531hhh07Wall (IOI14_wall)C++14
100 / 100
743 ms69712 KiB
#include <iostream> #include <vector> #include <algorithm> #include <queue> #include <utility> #include <set> #include <cmath> #include <climits> #include <cstring> using namespace std; typedef long long ll; typedef vector<int> vi; typedef pair<int, int> ii; const int N = 1<<21; int a[2*N + 5], b[2*N + 5]; void updateChild(int curr, int child){ a[child] = min(a[child], a[curr]); a[child] = max(a[child], b[curr]); b[child] = max(b[child], b[curr]); b[child] = min(b[child], a[curr]); } void updateSeg(int curr, int l, int r, int beg, int end, int type, int h){ if (l > end || r < beg) return; if (l >= beg && r <= end){ if (!type){ a[curr] = max(a[curr], h); b[curr] = max(b[curr], h); } else{ b[curr] = min(b[curr], h); a[curr] = min(a[curr], h); } return; } updateChild(curr, 2*curr + 1); updateChild(curr, 2*curr + 2); a[curr] = N; b[curr] = 0; int mid = (l + r)/2; updateSeg(2*curr + 1, l, mid, beg, end, type, h); updateSeg(2*curr + 2, mid + 1, r, beg, end, type, h); } void buildWall(int n, int k, int op[], int left[], int right[], int height[], int finalHeight[]) { std::ios::sync_with_stdio(false); for (int i = 0; i < k; i++){ updateSeg(0, 0, N - 1, left[i], right[i], op[i] - 1, height[i]); } for (int i = 0; i < N - 1; i++){ updateChild(i, 2*i + 1); updateChild(i, 2*i + 2); } for (int i = N - 1; i < N + n - 1; i++) finalHeight[i - (N - 1)] = min(a[i], b[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...