Soste in autostrada (autogrill)

Ciao, mi da 0/100 come esito, nella subtask 1 é tutto giusto, nella subtask 2 8 giusti mentre 13 errati e vorrei capire cosa c’é di sbagliato nel codice. Grazie

#include <bits/stdc++.h>
using namespace std;

#define ll long long

set<int> autostrada;

void inizia(){
    return;
}

void apri(ll p)
{
    autostrada.insert(p);
}

void chiudi(ll p)
{
    autostrada.erase(p);
}

long long chiedi(ll p)
{
    if (autostrada.empty())
        return -1;

    auto dopo = autostrada.lower_bound(p);
    auto prima = dopo;

    if (dopo == autostrada.end())
    {
        return *prev(autostrada.end());
    }

    if (dopo == autostrada.begin())
    {
        return *dopo;
    }

    --prima;

    ll dist_prima = abs(*prima - p);
    ll dist_dopo = abs(*dopo - p);

    if (dist_prima > dist_dopo)
    {
        return *dopo;
    }
    else if (dist_dopo > dist_prima)
    {
        return *prima;
    }
    else
    {
        return max(*prima, *dopo);
    }
}

Ciao, il problema è che dichiari il set autostrada come un set<int> invece di set<long long>.

Vero, grazie.