Salve! E’ da una settimana più o meno che sono incastrato su questo problema. Non riesco a prendere punteggio pieno per meno di mezzo secondo, e non so più come ottimizzare il codice, se non usando strutture dati o metodi diversi (che non conosco / non so usare). Chiedo aiuto, questo è il mio codice
#include <algorithm>
using namespace std;
vector<long long> autogrill;
void inizia(){
}
void apri(long long p){
for (int i = 0; i < autogrill.size(); i++) {
if(autogrill.size() == 0){
autogrill.push_back(p);
}
if(autogrill[i] > p){
autogrill.insert(autogrill.begin() + i, p);
return;
}
}
autogrill.push_back(p);
}
void chiudi(long long p){
for (int i = 0; i < autogrill.size(); i++){
if (autogrill[i] == p){
autogrill.erase(autogrill.begin()+i); //elimina dal vettore l'autogrill da chiudere
break;
}
}
}
long long chiedi(long long p){
if(autogrill.size() == 1){
return autogrill[0]; //se il vettore ha un solo elemento, lo ritorno
}
if(autogrill.size() != 0){ //se il vettore non è vuoto, cerco il valore giusto
for (int i = 0; i < autogrill.size(); i++) {
if(autogrill[i] > p){ //cerca il primo valore più grande di p nel vettore
if(i != 0){
if((autogrill[i] - p) <= (p - autogrill[i-1])){ //se il primo valore più grande di p è più grande o uguale al valore che viene esattamente prima, allora ritornalo
//cout << "A" << endl;
return autogrill[i];
} else {
//cout << "B" << endl;
return autogrill[i-1];
}
} else {
//cout << "E" << endl;
for (int i = 0; i < autogrill.size(); i++) {
cout << autogrill[i] << " ";
}
return autogrill[0];
}
}
}
//cout << "C" << endl;
return autogrill[autogrill.size()-1]; //se non ci sono numeri maggiori di p, l'autogrill più vicino sarà l'ultimo, siccome l'array è ordinato
} else {
//cout << "D" << endl;
return -1; //devo tornare -1 se il vettore è vuoto
}
}
int main() {
int Q;
cin >> Q;
for (int i = 0; i < Q; i++){
long long p;
char t;
cin >> t >> p;
if (t == 'a') apri(p);
else if (t == 'c') chiudi(p);
else cout << chiedi(p) << endl;
}
return 0;
}