#include <bits/stdc++.h>
using namespace std;
long long L;
set<long long>o;
int main()
{
cin>>L;
while(L--){
long long op,l;
cin>>op>>l;
if(op==1){
if(o.find(l)!=o.end()){
cout<<"Already Exist"<<endl;
}
else
o.insert(l);
}
else{
if(o.empty()) {
cout<<"Empty"<<endl;
continue;
}
if(o.find(l)!=o.end()){
o.erase(l);
cout<<l<<endl;
continue;
}
auto q=o.upper_bound(l);
q--;
auto v=q;
q++;
long long numq=*q;
long long numv=*v;
auto st=o.begin();
if(q==st){
long long k=*st;
cout<<k<<endl;
o.erase(k);
continue;
}
auto en=o.end();
if(q==en){
en--;
long long k=*en;
cout<<k<<endl;
o.erase(k);
continue;
}
if(numq-l<l-numv){//cout<<"!";+
cout<<numq<<endl;
o.erase(numq);
}
else{//cout<<"q"<<numq<<"v"<<numv;
cout<<numv<<endl;
o.erase(numv);
}
}
}
return 0;
}
这个都WA了 当我们先特判,再赋值
#include <bits/stdc++.h>
using namespace std;
long long L;
set<long long>o;
int main()
{
cin>>L;
while(L--){
long long op,l;
cin>>op>>l;
if(op==1){
if(o.find(l)!=o.end()){
cout<<"Already Exist"<<endl;
}
else
o.insert(l);
}
else{
if(o.empty()) {
cout<<"Empty"<<endl;
continue;
}
if(o.find(l)!=o.end()){
o.erase(l);
cout<<l<<endl;
continue;
}
auto q=o.upper_bound(l);
auto st=o.begin();
if(q==st){
long long k=*st;
cout<<k<<endl;
o.erase(k);
continue;
}
auto en=o.end();
if(q==en){
en--;
long long k=*en;
cout<<k<<endl;
o.erase(k);
continue;
}
q--;
auto v=q;
q++;
long long numq=*q;
long long numv=*v;
if(numq-l<l-numv){//cout<<"!";+
cout<<numq<<endl;
o.erase(numq);
}
else{//cout<<"q"<<numq<<"v"<<numv;
cout<<numv<<endl;
o.erase(numv);
}
}
}
return 0;
}
AC了 赋值没改变q 这就很奇怪