Autogrill 0/100

Buongiorno, stavo provando a risolvere il problema autogrill ma non capisco il perchè mi dia un output strano.
con questo input:
7
q 3
a 5
q 4
a 2
c 5
a 6
q 4

mi da questo output:
-1
-1
6

#include <bits/stdc++.h>

using namespace std;

set<long long>s;
set<long long>sn;

void inizia(){
}

void apri(long long p){ 
	s.insert(p);
	sn.insert(-p);
}
void chiudi(long long p){
	s.erase(p);
	sn.erase(-p);
}
long long chiedi(long long p){
	if(s.empty())return -1;
	long long a = *s.lower_bound(p);
	long long b = -*sn.lower_bound(-p);
	return (a-p)==(p-b) ? a : min(a,b); 
}

Stai attento agli undefined behaviour: lower_bound potrebbe restituire iteratori di fine che non puoi dereferenziare.
Inoltre mi sembra che la logica con cui scegli la risposta non sia corretta.