Salve a tutti, stavo provando a risolvere Soste in Autostrada (autogrill) ed ero arrivato a questo codice che risolve in tempo solo gli esempi e i testcase 018 e 020, andando in Execution timed out in tutti gli altri.
#include <set>
using namespace std;
set<long long> autogrillAperti;
void inizia() {
return;
}
void apri(long long p) {
autogrillAperti.insert(p);
}
void chiudi(long long p) {
autogrillAperti.erase(p);
}
long long chiedi(long long p) {
if (autogrillAperti.size()==0){
return -1;
}else{
set<long long>::iterator iteratore=lower_bound(autogrillAperti.begin(), autogrillAperti.end(), p);
if(*iteratore==p || iteratore==autogrillAperti.begin()){
return *iteratore;
}else if(iteratore==autogrillAperti.end()){
iteratore--;
return *iteratore;
}else{
long long avanti=*iteratore;
iteratore--;
if(p-*iteratore<avanti-p){
return *iteratore;
}else{
return avanti;
}
}
}
}
Dopo aver provato ad ottimizzarlo senza troppo successo sono andato sui forum dove ho trovato degli altri argomenti come ad esempio questo dove il codice è molto simile al mio ma non sembra avere dei problemi di tempo limite, qualcuno saprebbe spiegarmi cosa rallenta tanto il mio codice?
Grazie mille