제출 #1203332

#제출 시각아이디문제언어결과실행 시간메모리
1203332inesfi벽 (IOI14_wall)C++20
24 / 100
149 ms11352 KiB
#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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...