rt 悬关
#include<bits/stdc++.h>
#define lwb(x) lower_bound(v.begin(),v.end(),x)
#define upb(x) upper_bound(v.begin(),v.end(),x)
using namespace std;
vector<int>v;
int n;
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
int opt,x;scanf("%d%d",&opt,&x);
if(opt==1)
{
if(v.size()!=0)
{
if(v[lwb(x)-v.begin()]==x) printf("Already Exist\n");
else v.insert(lwb(x),x);
}
else v.insert(lwb(x),x);
}
else
{
if(v.size()==0)
{
printf("Empty\n");
}
else if(v[lwb(x)-v.begin()]==x)
{
v.erase(lwb(x));
printf("%d\n",x);
}
else
{
if(lwb(x)==v.begin())
{
printf("%d\n",v[0]);
v.erase(lwb(x));
}
else if(lwb(x)==v.end())
{
printf("%d\n",v[v.size()-1]);
v.erase(lwb(x));
}
else
{
int val1 = v[lwb(x)-v.begin()];
int val2 = v[lwb(x)-v.begin()-1];
if(abs(val1-x)>abs(val2-x) || abs(val1-x)==abs(val2-x))
{
printf("%d\n",val2);
v.erase(lower_bound(v.begin(),v.end(),val2));
}
else if(abs(val1-x)<abs(val2-x))
{
printf("%d\n",val1);
v.erase(lower_bound(v.begin(),v.end(),val1));
}
}
}
}
}
return 0;
}