#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<<17;
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;
if(intervalle[i].second > *choisis.begin()){
auto igauche = choisis.lower_bound(intervalle[i].second);
igauche--;
int gauche = *igauche;
int maxiGauche = calcMax(gauche + DECA, intervalle[i].second+DECA);
if(maxiGauche - intervalle[i].first < D){
estOk = false;
}
}
if(intervalle[i].second < *choisis.rbegin()){
auto idroite = choisis.lower_bound(intervalle[i].second);
int droite = *idroite;
int maxiDroite = calcMax(intervalle[i].second+DECA, droite+DECA);
if(maxiDroite-intervalle[i].first < D){
estOk = false;
}
}
if(estOk){
choisis.insert(intervalle[i].second);
}
}
return choisis.size();
}
Compilation message
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++){
| ~^~~~~~~~~~~~~~~~~~
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Runtime error |
7 ms |
2668 KB |
Execution killed with signal 11 |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Runtime error |
1 ms |
600 KB |
Execution killed with signal 11 |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Runtime error |
1 ms |
600 KB |
Execution killed with signal 11 |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Runtime error |
13 ms |
4308 KB |
Execution killed with signal 11 |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Runtime error |
7 ms |
2004 KB |
Execution killed with signal 11 |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Runtime error |
1 ms |
600 KB |
Execution killed with signal 11 |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Runtime error |
7 ms |
2668 KB |
Execution killed with signal 11 |
2 |
Halted |
0 ms |
0 KB |
- |