显然这题的所有操作都可以用set,但是直接用set肯定要T,考虑到读入量较大,使用fread读入优化,就可以卡过去了。
#include<cstdio>
#include<set>
using std::set;
struct buf{
char z[3<<23],*s;
buf():s(z){
z[fread(z,1,sizeof z,stdin)]=0;
}
operator int(){
int x=0;
while(*s<48)++s;
while(*s>32)
x=x*10+*s++-48;
return x;
}
}it;
int main(){
set<int>s;
~it;
for(int m=it;m;--m){
int o=it;
if(o==1)s.insert(it);
if(o==2)s.erase(it);
if(o==3)
printf("%d
",s.size()?*s.begin():-1);
if(o==4)
printf("%d
",s.size()?*--s.end():-1);
if(o==5){
set<int>::iterator i=s.lower_bound(it);
printf("%d
",i!=s.begin()?*--i:-1);
}
if(o==6){
set<int>::iterator i=s.upper_bound(it);
printf("%d
",i!=s.end()?*i:-1);
}
if(o==7)
printf("%d
",s.count(it)?1:-1);
}
}