#include <iostream>
#include<set>
#include<cmath>
using namespace std;
set<int> s;
int main() {
	int q;
	int op;
	cin>>q;
	while(q--)
	{
		cin>>op;
		int x;
		cin>>x;
		if(op==1)
		{
			
			if(s.find(x)!=s.end())
			{
				cout<<"Already Exist\n";
			}
			else
				s.insert(x);
		}
		else 
		{
			if(!s.empty())
			{
				auto it=s.lower_bound(x);//>=x的迭代器
				//情况一:值比所有都小
				
				if(it==s.begin())
				{
					cout<<*s.begin()<<'\n';
					s.erase(*it);
				}
				//情况二:值比所有都大:
				else if(it==s.end())
				{
					cout<<*(--it)<<'\n';
					s.erase(*it);
					it++;//it回复回来;
				}//1,2,3;x=5
				//情况三:没有卡到边界值的时候:
				else{
					int num2=abs(*it-x);
					int num1=abs(*(--it)-x);
					if(num1<=num2){
					cout<<*it<<'\n';
					s.erase(*it);
					}
					else 
					{
						cout<<*(++it)<<'\n';
						s.erase(*it);
					}
				}
				
			}
			else 
				cout<<"Empty\n";
		}
	}
}

这道题还是有一些点值得去学习的。

第一:我确实是没考虑到作为首和尾位的情况;

第二:我也没考虑到如果num1==num2也得输出num1对应的值(人家让输出小的)

第三:好吧我有点笨,upper_bound()和lower_bound()其实差不多来着...

第四:其实set的一些操作我已经忘记了...

这次复习了s.erase(),s.insert(),s.find(x),以及s.empty()啥的;

就这样吧懒得写了。

妹妹我好想你。

还有就是为什么从那以后,我就对你,有点想念?你是一个很好的人,就是这个人吧,态度那叫一个诡异。

反正你也看不到我就随便写了。

你要干啥?前几天给我表白了这几天就感觉很讨厌我似的。你爱咋咋,我不要面子的吗?