#include "wall.h"
#include <bits/stdc++.h>
using namespace std;
///Segment Tree
///Lazy Propagation
///Determine the final shape of the wall
///Every cascade of operations can be seen as an lower bound and upper bound (or an operation add and remove)
int segm_tree[6000000];
int leftNode(int i)
{
return i*2;
}
int rightNode(int i)
{
return i*2+1;
}
void recompute(int i)
{
segm_tree[i]=max(segm_tree[leftNode(i)],segm_tree[rightNode(i)]);
}
struct bound
{
int on;
int a,b;
} lazy[6000005];
#define inf 1000000
void combine(int cur,int past) ///Combines the new operation with the last one
{
if(lazy[cur].on==0){
lazy[cur]=lazy[past];
return;
}
int x=lazy[past].a;
if(x>lazy[cur].a)
lazy[cur].a=x;
if(x>lazy[cur].b)
lazy[cur].b=x;
x=lazy[past].b;
if(x<lazy[cur].a)
lazy[cur].a=x;
if(x<lazy[cur].b)
lazy[cur].b=x;
}
void propagate(int i,int L,int R)
{
if(lazy[i].on==0) return;
segm_tree[i]=max(segm_tree[i],lazy[i].a); //Lower bound
segm_tree[i]=min(segm_tree[i],lazy[i].b); //Upper bound
if(L<R){
combine(leftNode(i),i);
combine(rightNode(i),i);
}
lazy[i].on=0;
lazy[i].a=-inf;
lazy[i].b=inf;
}
void update(int i,int L,int R,int x,int y,int type,int h)
{
propagate(i,L,R);
if(x<=L && R<=y){
if(type==1) lazy[i].a=h,lazy[i].b=inf;
else lazy[i].a=-inf,lazy[i].b=h;
lazy[i].on=1;
}
else{
int mid=(L+R)/2;
if(x<=mid)
update(leftNode(i),L,mid,x,y,type,h);
if(mid+1<=y)
update(rightNode(i),mid+1,R,x,y,type,h);
propagate(leftNode(i),L,mid);
propagate(rightNode(i),mid+1,R);
recompute(i);
}
}
int query(int i,int L,int R,int x)
{
propagate(i,L,R);
if(L==R){
return segm_tree[i];
}
else{
int mid=(L+R)/2;
if(x<=mid)
return query(leftNode(i),L,mid,x);
else
return query(rightNode(i),mid+1,R,x);
}
}
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,1,n,left[i]+1,right[i]+1,op[i],height[i]);
}
for(int i=0;i<n;i++){
finalHeight[i]=query(1,1,n,i+1);
}
}
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
5 ms |
376 KB |
Output is correct |
2 |
Correct |
7 ms |
376 KB |
Output is correct |
3 |
Correct |
7 ms |
376 KB |
Output is correct |
4 |
Correct |
15 ms |
1016 KB |
Output is correct |
5 |
Correct |
11 ms |
1016 KB |
Output is correct |
6 |
Correct |
11 ms |
1016 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
5 ms |
376 KB |
Output is correct |
2 |
Correct |
187 ms |
8184 KB |
Output is correct |
3 |
Correct |
382 ms |
4728 KB |
Output is correct |
4 |
Correct |
1124 ms |
12920 KB |
Output is correct |
5 |
Correct |
344 ms |
13432 KB |
Output is correct |
6 |
Correct |
316 ms |
13432 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
5 ms |
376 KB |
Output is correct |
2 |
Correct |
6 ms |
380 KB |
Output is correct |
3 |
Correct |
7 ms |
376 KB |
Output is correct |
4 |
Correct |
15 ms |
1016 KB |
Output is correct |
5 |
Correct |
11 ms |
1016 KB |
Output is correct |
6 |
Correct |
11 ms |
1016 KB |
Output is correct |
7 |
Correct |
5 ms |
376 KB |
Output is correct |
8 |
Correct |
183 ms |
8184 KB |
Output is correct |
9 |
Correct |
376 ms |
4856 KB |
Output is correct |
10 |
Correct |
1089 ms |
13068 KB |
Output is correct |
11 |
Correct |
345 ms |
13440 KB |
Output is correct |
12 |
Correct |
321 ms |
13560 KB |
Output is correct |
13 |
Correct |
5 ms |
376 KB |
Output is correct |
14 |
Correct |
183 ms |
8184 KB |
Output is correct |
15 |
Correct |
64 ms |
2040 KB |
Output is correct |
16 |
Correct |
1172 ms |
13176 KB |
Output is correct |
17 |
Correct |
335 ms |
13176 KB |
Output is correct |
18 |
Correct |
322 ms |
13176 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
4 ms |
256 KB |
Output is correct |
2 |
Correct |
6 ms |
376 KB |
Output is correct |
3 |
Correct |
7 ms |
376 KB |
Output is correct |
4 |
Correct |
15 ms |
1016 KB |
Output is correct |
5 |
Correct |
11 ms |
1016 KB |
Output is correct |
6 |
Correct |
11 ms |
1016 KB |
Output is correct |
7 |
Correct |
5 ms |
376 KB |
Output is correct |
8 |
Correct |
184 ms |
8184 KB |
Output is correct |
9 |
Correct |
381 ms |
4856 KB |
Output is correct |
10 |
Correct |
1116 ms |
12920 KB |
Output is correct |
11 |
Correct |
335 ms |
13520 KB |
Output is correct |
12 |
Correct |
313 ms |
13432 KB |
Output is correct |
13 |
Correct |
5 ms |
376 KB |
Output is correct |
14 |
Correct |
190 ms |
8184 KB |
Output is correct |
15 |
Correct |
64 ms |
2040 KB |
Output is correct |
16 |
Correct |
1176 ms |
13176 KB |
Output is correct |
17 |
Correct |
342 ms |
13176 KB |
Output is correct |
18 |
Correct |
331 ms |
13176 KB |
Output is correct |
19 |
Correct |
1027 ms |
92036 KB |
Output is correct |
20 |
Correct |
1032 ms |
89592 KB |
Output is correct |
21 |
Correct |
1024 ms |
92028 KB |
Output is correct |
22 |
Correct |
1016 ms |
89460 KB |
Output is correct |
23 |
Correct |
1016 ms |
89464 KB |
Output is correct |
24 |
Correct |
1004 ms |
89592 KB |
Output is correct |
25 |
Correct |
1020 ms |
89768 KB |
Output is correct |
26 |
Correct |
1036 ms |
91936 KB |
Output is correct |
27 |
Correct |
1018 ms |
92152 KB |
Output is correct |
28 |
Correct |
1016 ms |
89592 KB |
Output is correct |
29 |
Correct |
1002 ms |
89464 KB |
Output is correct |
30 |
Correct |
1006 ms |
89724 KB |
Output is correct |