#include <bits/stdc++.h>
using namespace std;
set<long long> s;
long long k;
auto itr = s.begin();
void inizia() {
return;
}
void apri(long long p) {
s.insert(p);
return;
}
void chiudi(long long p) {
s.erase(p);
return;
}
long long chiedi(long long p) {
if(s.empty()) return -1;
else{
itr = s.lower_bound(p);
if(p>*itr){
itr = s.end();
itr--;
}
k = *itr;
}
return k;
}
sincero, so che sto dimenticando qualcosa, perchè l’algoritmo riesce solo nelle task base, ma dopo svariati tentativi, e vedendo che con esempi dati da me l’output è sempre corretto, non ho idea di cosa io abbia sbagliato. Mi sto allenando tanto per l’ultima gara, quindi se riuscite a farmi capire per bene l’errore vi sarei molto grato, grazie in anticipo.
#include <bits/stdc++.h>
using namespace std;
set<long long> s;
long long k;
auto itr = s.begin();
auto tri = itr;
void inizia() {
return;
}
void apri(long long p) {
s.insert(p);
return;
}
void chiudi(long long p) {
s.erase(p);
return;
}
long long chiedi(long long p) {
if(s.empty()) return -1;
else{
itr = s.lower_bound(p);
tri=itr;
tri--;
if(abs(p-*itr)<=abs(p-*tri)) return *itr;
else return *tri;
}
}
grazie mille,
adesso ho aggiustato creando un altro iteratore, e inizializzandolo al primo. In questo modo alla fine faccio il confronto tra il primo numero >= p, e il primo numero <p. In questo modo sono riuscito a fare 13/20 subtasks. ma ancora non tutte. Ci ho riflettuto su una 30 di min ma non riesco ancora a trovare il bug. Ogni idea è ben accetta.