이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include "wall.h"
#include <bits/stdc++.h>
using namespace std;
const int nx=2e6+5;
struct segtree
{
struct node
{
int low, up;
node(): low(0), up(INT_MAX){}
} d[4*nx];
void add(int l, int r, int i, int ql, int qr, int t)
{
if (qr<l||r<ql) return;
t=max(t, d[i].low);
t=min(t, d[i].up);
if (ql<=l&&r<=qr) return void(d[i].low=t);
int md=(l+r)/2;
add(l, md, 2*i, ql, qr, t);
add(md+1, r, 2*i+1, ql, qr, t);
}
void remove(int l, int r, int i, int ql, int qr, int t)
{
if (qr<l||r<ql) return;
t=max(t, d[i].low);
t=min(t, d[i].up);
if (ql<=l&&r<=qr) return void(d[i].up=t);
int md=(l+r)/2;
remove(l, md, 2*i, ql, qr, t);
remove(md+1, r, 2*i+1, ql, qr, t);
}
int query(int l, int r, int i, int idx, int t)
{
t=max(t, d[i].low);
t=min(t, d[i].up);
if (l==r) return t;
int md=(l+r)/2;
if (idx<=md) return query(l, md, 2*i, idx, t);
else return query(md+1, r, 2*i+1, idx, t);
}
} s;
void buildWall(int n, int k, int op[], int left[], int right[], int height[], int finalHeight[]){
for (int i=k-1; i>=0; i--)
{
if (op[i]==1) s.add(0, n-1, 1, left[i], right[i], height[i]);
else s.remove(0, n-1, 1, left[i], right[i], height[i]);
}
for (int i=0; i<n; i++) finalHeight[i]=s.query(0, n-1, 1, i, 0);
}
# | 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... |