Submission #600409

#TimeUsernameProblemLanguageResultExecution timeMemory
600409PiejanVDCWall (IOI14_wall)C++17
0 / 100
124 ms262144 KiB
#include "wall.h" #include <bits/stdc++.h> using namespace std; /* minA = min(min1, min2) minA = max(minA, max2) maxA = max(max1, max2) maxA = min(maxA, min2) */ const int mxN = (int)4e7+5; vector<int>mn(mxN, INT_MAX); vector<int>mx(mxN, INT_MIN); int l,r; int MX, MN; void reset(int p) { mn[p] = INT_MAX; mx[p] = INT_MIN; } void push(int mn_, int mx_, int p) { mn[p] = min(mn[p], mn_); mn[p] = max(mn[p], mx_); mx[p] = max(mx[p], mx_); mx[p] = min(mx[p], mn_); } void update(int i, int j, int p) { if(i > r || j < l) return; if(i >= l && j <= r) { mn[p] = min(mn[p], MN); mn[p] = max(mn[p], MX); mx[p] = max(mx[p], MX); mx[p] = min(mx[p], MN); return; } int mid = (i+j)/2; push(mn[p], mx[p], 2*p); push(mn[p], mx[p], 2*p+1); reset(p); update(i, mid, 2*p); update(mid+1, j, 2*p+1); } int query(int i, int j, int p) { if(i >= l && j <= r) { return max(0, mx[p]); } int mid = (i+j)/2; push(mn[p], mx[p], 2*p); push(mn[p], mx[p], 2*p+1); reset(p); if(l <= mid) return query(i, mid, 2*p); return query(mid+1, j, 2*p+1); } void buildWall(int n, int k, int op[], int left[], int right[], int height[], int finalHeight[]){ for(int i = 0 ; i < k ; i++) { if(op[i] == 1) { MX = height[i]; MN = INT_MAX; l = left[i]; r = right[i]; update(0, n-1, 1); } else { MX = INT_MIN; MN = height[i]; l = left[i]; r = right[i]; update(0, n-1, 1); } } for(int i = 0 ; i < n ; i++) { l = i, r = i; finalHeight[i] = query(0, n-1, 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...