题目: 分析:我用之前的set做吧,刚好有查找函数。 代码: #include<bits/stdc++.h> using namespace std; set<int> s; int main() { s.insert(2000000005); s.insert(-2000000005); int m; cin>>m; for(int i=0;i<m;i++) { int m1,m2; cin>>m1>>m2; if(m1==1) {//放 if(s.count(m2)==1){ cout<<"Already Exist"<<endl; continue; } s.insert(m2); } else {//取 if(s.size()==2) { cout<<"Empty"<<endl; continue; } set<int>::iterator k=s.lower_bound(m2); set<int>::iterator k2=k; k2--; if(*k-m2 < m2-*k2) { cout<<*k<<endl; s.erase(k); } else{ cout<<*k2<<endl; s.erase(k2); } } } } re了,不知道为什么。 set中因为需要用到搜索,因此一般会加入大的和小的两个数。方便。