#include <iostream>
#include "wall.h"
using namespace std;
const int N=2e6+5;
struct seg
{
int val_min,val_max;
} aint[4*N];
void aplica(int nod,seg x)
{
aint[nod].val_min=max(aint[nod].val_min,x.val_min);
aint[nod].val_max=max(aint[nod].val_max,aint[nod].val_min);
aint[nod].val_max=min(aint[nod].val_max,x.val_max);
aint[nod].val_min=min(aint[nod].val_min,aint[nod].val_max);
}
void propaga(int nod)
{
aplica(nod*2,aint[nod]);
aplica(nod*2+1,aint[nod]);
aint[nod].val_min=0;
aint[nod].val_max=1e9+2;
}
void update(int nod,int st,int dr,int l,int r,seg x)
{
if(l<=st&&dr<=r)
{
aplica(nod,x);
}
else if(l>dr||st>r)
return ;
else
{
int mij=(st+dr)/2;
propaga(nod);
update(nod*2,st,mij,l,r,x);
update(nod*2+1,mij+1,dr,l,r,x);
}
}
seg query(int nod,int st,int dr,int poz)
{
if(st==dr)
return aint[nod];
else
{
int mij=(st+dr)/2;
if(poz<=mij)
return query(nod*2,st,mij,poz);
else
return query(nod*2+1,mij+1,dr,poz);
}
}
const int inf=1e9+2;
void buildWall(int n, int k, int op[], int left[], int right[], int height[], int finalHeight[])
{
for(int i=1;i<=4*n;i++)
{
aint[i].val_min=0;
aint[i].val_max=1e9+2;
}
for(int i=0; i<k; i++)
{
left[i]++;
right[i]++;
if(op[i]==1)
{
update(1,1,n,left[i],right[i], {height[i],inf});
}
else
update(1,1,n,left[i],right[i], {0,height[i]});
}
for(int i=0; i<n; i++)
{
finalHeight[i]=query(1,1,n,i+1).val_min;
}
return;
}
# | 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... |