This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include "bits/stdc++.h"
using namespace std;
const int MAXN = 2e6 + 5;
const int inf = 1e9 + 7;
struct Node {
int mx = inf;
int mn = 0;
Node()
{
};
}
seg[MAXN * 4];
void push(int v)
{
seg[2 * v].mn = min(seg[v].mx, max(seg[v * 2].mn, seg[v].mn));
seg[2 * v].mx = max(seg[v].mn, min(seg[2 * v].mx, seg[v].mx));
seg[2 * v + 1].mn = min(seg[v].mx, max(seg[v * 2 + 1].mn, seg[v].mn));
seg[2 * v + 1].mx = max(seg[v].mn, min(seg[2 * v + 1].mx, seg[v].mx));
seg[v].mn = 0;
seg[v].mx = inf;
}
void update(int v, int tl, int tr, int l, int r, int val, int type)
{
if(l > r)
return;
if(l <= tl && r >= tr)
{
if(type == 1)
{
seg[v].mx = max(seg[v].mx, val);
seg[v].mn = max(seg[v].mn, val);
} else
{
seg[v].mx = min(seg[v].mx, val);
seg[v].mn = min(seg[v].mn, val);
}
return;
}
push(v);
int tm = (tl + tr) / 2;
update(2 * v, tl, tm, l, min(tm, r), val, type);
update(2 * v + 1, tm + 1, tr, max(l, tm + 1), r, val, type);
}
int get(int v, int tl, int tr, int pos)
{
if(tl == tr)
return seg[v].mn;
push(v);
int tm = (tl + tr) / 2;
if(tm >= pos)
return get(2 * v, tl, tm, pos);
else
return get(2 * v + 1, tm + 1, tr, pos);
}
void buildWall (int n, int k, int op[], int left[], int right[], int height[], int finalHeight[]) {
for (int i = 0; i < k; i++) {
update(1, 0, n - 1, left[i], right[i], height[i], op[i]);
}
for (int i = 0; i < n; i++) {
finalHeight[i] = get(1, 0, n - 1, i);
}
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |