为什么这样是WA 0pts:
#include<bits/stdc++.h>
using namespace std;
set<int>s;
int n,x,y;
int main()
{
cin>>n;
for(int i=1;i<=n;i++){
cin>>x>>y;
if(x==1){
if(s.find(y)==s.end()) s.insert(y);
else cout<<"Already Exist"<<endl;
}
else if(x==2){
if(s.empty()) cout<<"Empty"<<endl;
else if(s.find(y)!=s.end()){
cout<<y<<endl;
s.erase(y);
}
else{
set<int>::iterator it=s.lower_bound(y),it2;
if(it!=s.begin()) it2=it--;
if(it!=s.begin()){
if(abs(*it2-y)<=abs(*it-y)){
cout<<*it2<<endl;
s.erase(it2);
}
else{
cout<<*it<<endl;
s.erase(it);
}
}
else{
cout<<*it<<endl;
s.erase(it);
}
}
}
}
return 0;
}
而这样就是AC 100pts:
#include<bits/stdc++.h>
using namespace std;
set<int>s;
int n,x,y;
int main()
{
cin>>n;
for(int i=1;i<=n;i++){
cin>>x>>y;
if(x==1){
if(s.find(y)==s.end()) s.insert(y);
else cout<<"Already Exist"<<endl;
}
else if(x==2){
if(s.empty()) cout<<"Empty"<<endl;
else if(s.find(y)!=s.end()){
cout<<y<<endl;
s.erase(y);
}
else{
set<int>::iterator it=s.lower_bound(y),it2=it;
if(it!=s.begin()){
it2--;
if(abs(*it2-y)<=abs(*it-y)){
cout<<*it2<<endl;
s.erase(it2);
}
else{
cout<<*it<<endl;
s.erase(it);
}
}
else{
cout<<*it<<endl;
s.erase(it);
}
}
}
}
return 0;
}
中间就改了一个指针修改方式,求这样的原因是什么?