Submission #1015629

# Submission time Handle Problem Language Result Execution time Memory
1015629 2024-07-06T15:38:28 Z nam6 Radio Towers (IOI22_towers) C++17
0 / 100
13 ms 4308 KB
#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++){
      |                ~^~~~~~~~~~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Runtime error 7 ms 2668 KB Execution killed with signal 11
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Runtime error 1 ms 600 KB Execution killed with signal 11
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Runtime error 1 ms 600 KB Execution killed with signal 11
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Runtime error 13 ms 4308 KB Execution killed with signal 11
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Runtime error 7 ms 2004 KB Execution killed with signal 11
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Runtime error 1 ms 600 KB Execution killed with signal 11
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Runtime error 7 ms 2668 KB Execution killed with signal 11
2 Halted 0 ms 0 KB -