TlE ont test 18
set 换成 vector mle 了
#include<bits/stdc++.h>
#define int long long
#define pt putchar(' ')
#define nl puts("")
#define pi pair<int,int>
#define go(it) for(auto &it:as[x])
using namespace std;
set<int> s;
map<int,int> lt;
map<int,set<pi>> Del;
int fr(){
int x=0,flag=1;
char ch=getchar();
while(ch<'0' || ch>'9'){
if(ch=='-') flag=-1;
ch=getchar();
}
while(ch>='0' && ch<='9'){
x=x*10+(ch-'0');
ch=getchar();
}
return x*flag;
}
void fw(int x){
if(x<0) putchar('-'),x=-x;
if(x>9) fw(x/10);
putchar(x%10+'0');
}
int max(int a,int b){return a>b?a:b;}
int min(int a,int b){return a<b?a:b;}
int query(int x)
{
if(!lt.count(x)) lt[x]=1;
for(int i=lt[x];;i++)
{
if(!s.count(i*x)) {lt[x]=i;return i*x;}
else Del[i*x].insert({x,i});
}
}
void del(int x)
{
if(s.count(x)) s.erase(x);
for(auto it:Del[x])
lt[it.first]=min(lt[it.first],it.second);
Del[x].clear();
}
signed main()
{
int T=fr();
while(T--)
{
char op[2];
int x;
scanf("%s",op),x=fr();
if(op[0]=='+') s.insert(x);
else if(op[0]=='-') del(x);
else fw(query(x)),nl;
}
return 0;
}