set的使用注意:
错误1.
a = s.begin();
-- a;
s.erase(a); // 错误,未知行为,不知道会发生什么
错误2.
a = s.end();
s.erase(a); // 错误
++ a; // 错误,未定义操作
综上:set的begin前面的迭代器
和end及end以后的迭代器
不可以使用,不管要干什么。
#include<iostream>
#include<set>
using namespace std;
set<int> s;
int n;
int main(){
cin >> n;
while(n --){
int k, l;
cin >> k >> l;
if(k == 1){
if(s.count(l) == 0) s.insert(l);
else puts("Already Exist");
}else{
if(s.size() == 0){
puts("Empty");
continue;
}
auto a = s.lower_bound(l);
if(a == s.begin()){
cout << *a << endl;
s.erase(s.begin());
continue;
}
if(a == s.end()){
-- a;
cout << *a << endl;
s.erase(a);
continue;
}
int x = *a - l;
-- a;
if(l - *a <= x) cout << *a;
else cout << *(++ a);
s.erase(a);
puts("");
}
}
return 0;
}