#include "wall.h"
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int DECA=(1<<17);
int arbremax[2*DECA],arbremin[2*DECA];
void remontemax(int a,int b,int val){
if (a==b){
arbremax[a]=max(arbremax[a],val);
return ;
}
if (a%2==1){
arbremax[a]=max(arbremax[a],val);
remontemax(a+1,b,val);
return ;
}
if (b%2==0){
arbremax[b]=max(arbremax[b],val);
remontemax(a,b-1,val);
return ;
}
remontemax(a/2,b/2,val);
}
void remontemin(int a,int b,int val){
if (a==b){
arbremin[a]=min(arbremin[a],val);
return ;
}
if (a%2==1){
arbremin[a]=min(arbremin[a],val);
remontemin(a+1,b,val);
return ;
}
if (b%2==0){
arbremin[b]=min(arbremin[b],val);
remontemin(a,b-1,val);
return ;
}
remontemin(a/2,b/2,val);
}
void buildWall(int nbcol,int nbchangements, int op[], int gauche[], int droite[], int hauteur[], int rep[]){
int ec=0;
while (op[ec]==1){
remontemax(gauche[ec]+DECA,droite[ec]+DECA,hauteur[ec]);
ec++;
}
for (int i=0;i<DECA*2;i++){
arbremin[i]=1000*1000*1000;
}
for (int i=ec;i<nbchangements;i++){
remontemin(gauche[i]+DECA,droite[i]+DECA,hauteur[i]);
}
for (int i=1;i<2*DECA;i++){
arbremax[i]=max(arbremax[i],arbremax[i/2]);
arbremin[i]=min(arbremin[i],arbremin[i/2]);
}
for (int i=DECA;i<DECA+nbcol;i++){
rep[i-DECA]=min(arbremax[i],arbremin[i]);
}
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... |