Submission #1016590

#TimeUsernameProblemLanguageResultExecution timeMemory
1016590n3rm1nWall (IOI14_wall)C++17
32 / 100
231 ms22612 KiB
#include <bits/stdc++.h> #define endl '\n' using namespace std; const int MAXN = 1e5 + 10; int nn, kk; int lazy_max[4 * MAXN], lazy_min[4 * MAXN]; int add[MAXN], rem[MAXN]; int ql, qr, h; void makeit(int i, int l, int r) { lazy_max[i] = -1; lazy_min[i] = 1e6; if(l == r) { return; } int mid = (l + r)/2; makeit(2*i, l, mid); makeit(2*i+1, mid+1, r); } void update_maxx(int i, int l, int r) { if(ql <= l && r <= qr) { lazy_max[i] = max(lazy_max[i], h); return; } if(ql > r || qr < l) return; int mid = (l + r)/2; update_maxx(2*i, l, mid); update_maxx(2*i+1, mid+1, r); } void update_minn(int i, int l, int r) { if(ql <= l && r <= qr) { lazy_min[i] = min(lazy_min[i], h); return; } if(ql > r || qr < l) return; int mid = (l + r)/2; update_minn(2*i, l, mid); update_minn(2*i+1, mid+1, r); } void build_add(int i, int l, int r, int move_down) { if(l == r) { add[l] = max(lazy_max[i], move_down); return ; } int mid = (l + r)/2; build_add(2*i, l, mid, max(move_down, lazy_max[i])); build_add(2*i+1, mid+1, r, max(move_down, lazy_max[i])); } void build_rem(int i, int l, int r, int move_down) { if(l == r) { rem[l] = min(lazy_min[i], move_down); return; } int mid = (l + r)/2; build_rem(2*i, l, mid, min(move_down, lazy_min[i])); build_rem(2*i+1, mid+1, r, min(move_down, lazy_min[i])); } void buildWall(int n, int k, int op[], int left[], int right[], int height[], int finalHeight[]) { if(n <= 10000) { for (int i = 0; i < k; ++ i) { for (int j = left[i]; j <= right[i]; ++ j) { if(op[i] == 1)finalHeight[j] = max(finalHeight[j], height[i]); else finalHeight[j] = min(finalHeight[j], height[i]); } } return; } makeit(1, 0, n-1); for (int i = 0; i < k; ++ i) { ql = left[i]; qr = right[i]; h = height[i]; if(op[i] == 1) { update_maxx(1, 0, n-1); } else update_minn(1, 0, n-1); } build_add(1, 0, n-1, -1); build_rem(1, 0, n-1, 1e6); for (int i = 0; i < n; ++ i) { finalHeight[i] = max(0, add[i]); finalHeight[i] = min(finalHeight[i], rem[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...