This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include "towers.h"
#include<bits/stdc++.h>
using namespace std;
int sommet;
vector<int> altitudes;
vector< pair<int, int> > intervalle;
set<int> choisis;
const int DECA = 1<<22;
int arbre[2*DECA];
void modif(int pos, int val){
pos+=DECA;
arbre[pos] = val;
while(pos > 1){
pos/=2;
arbre[pos] = max(arbre[2*pos], arbre[2*pos+1]);
}
}
int calcMax(int deb, int fin){
if(deb==fin)
return arbre[fin];
if(deb%2==1)
return max(arbre[deb], calcMax(deb+1, fin));
if(fin%2==0)
return max(calcMax(deb, fin-1), fin);
return calcMax(deb/2, fin/2);
}
void init(int N, vector<int> H) {
altitudes = H;
}
int max_towers(int L, int R, int D) {
for(int pos=L; pos<=R; pos++){
intervalle.push_back({altitudes[pos],pos});
modif(pos, altitudes[pos]);
}
sort(intervalle.begin(), intervalle.end());
for(int i=0; i<intervalle.size(); i++){
bool estOk = true;
auto igauche = choisis.lower_bound(intervalle[i].second);
if(igauche != choisis.begin()){
igauche--;
int gauche = *igauche;
int maxiGauche = calcMax(gauche + DECA, intervalle[i].second+DECA);
if(maxiGauche - max(gauche, intervalle[i].first) < D){
estOk = false;
}
}
auto idroite = choisis.upper_bound(intervalle[i].second);
if(idroite != choisis.end()){
int droite = *idroite;
int maxiDroite = calcMax(intervalle[i].second+DECA, droite+DECA);
if(maxiDroite- max(droite, intervalle[i].first) < D){
estOk = false;
}
}
if(estOk){
choisis.insert(intervalle[i].second);
}
}
return choisis.size();
}
Compilation message (stderr)
towers.cpp: In function 'int max_towers(int, int, int)':
towers.cpp:42:17: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
42 | for(int i=0; i<intervalle.size(); i++){
| ~^~~~~~~~~~~~~~~~~~
# | 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... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |