Soste in autostrada(autogrill) non capisco cosa ci possa essere di sbagliato

il programma funziona senza problemi con gli input che sono dati da esempio e altri che ho fatto da me, ma quando vado a sottoporlo come valutazione mi dà sempre 0/100, non capisco perché

#include <iostream>
#include <cassert>
#include <utility>
#include <vector>
#include <algorithm>

using namespace std;

vector <long long int> pos;

void inizia() {
    pos.clear();
}

void apri(long long p) {
    pos.push_back(p);
}

void chiudi(long long p) {
    auto j = find(pos.begin(), pos.end(), p);
    long long int index = distance(pos.begin(),j);
    pos.erase(pos.begin() + index);
}

long long chiedi(long long p) {
    if  (count(pos.begin(), pos.end(), p) != 0){
        return p;
    }
    apri(p);
    if (pos.size()==1){
        chiudi(p);
        return -1;
    }
    if (pos.size()==2){
        chiudi(p);
        return pos[0];
    }
    sort(pos.begin(), pos.end());
    auto j = find(pos.begin(), pos.end(), p);
    long long int index = distance(pos.begin(),j);
    long long int f = pos[index-1];
    long long int m = pos[index];
    long long int t = pos[index+1];
    if (m - f > t - m) {
        chiudi(p);
        return f;
    } else {
        chiudi(p);
        return t;
    }
}



int main() {
    int Q;
    cin >> Q;

    inizia();

    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;
}

ciao, il tuo algoritmo ha una complessità troppo elevata e quindi sicuramente va in timeout con gli input più grandi. per risolvere questo problema ti consiglio di usare un set