原 OJ 测的,#17 #24 和样例过了,剩下 22 个点全部 RE,求助一下rt
#include<bits/stdc++.h>
#define Std_Maker lhm
#define ll long long
using namespace std;
ll q,op,x,lst,cnt,il,im,ir,a1,a2,a3,inf,ins;
multiset<ll> s,ans;
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin>>q;
while(q--)
{
cin>>op;
if(op==1)
{
cin>>x;
s.insert(x);
auto l=s.find(x),m=s.find(x),r=s.find(x);
if(s.size()==2)
{
auto fst=s.begin(),sec=s.begin();
advance(sec,1);
inf=*fst,ins=*sec;
inf^=ins;
ans.insert(inf);
}
else if(s.size()>=3)
{
if(l!=s.begin() and l!=s.end())
{
advance(l,-1);
advance(r,1);
il=*l,im=*m,ir=*r;
a1=il^im,a2=im^ir,a3=il^ir;
ans.insert(a1);
ans.insert(a2);
ans.erase(ans.find(a3));
}
else if(l==s.begin())
{
advance(r,1);
im=*m,ir=*r;
a2=im^ir;
ans.insert(a2);
}
else if(l==s.end())
{
advance(l,-1);
im=*m,il=*l;
a2=im^il;
ans.insert(a2);
}
}
}
else if(op==2)
{
cin>>x;
auto l=s.find(x),m=s.find(x),r=s.find(x);
if(s.size()<=2) ans.clear();
else
{
if(l!=s.begin() and l!=s.end())
{
advance(l,-1);
advance(r,1);
il=*l,im=*m,ir=*r;
a1=il^im,a2=im^ir,a3=il^ir;
ans.erase(ans.find(a1));
ans.erase(ans.find(a2));
ans.insert(a3);
}
else if(l==s.begin())
{
advance(r,1);
im=*m,ir=*r;
a2=im^ir;
ans.erase(ans.find(a2));
}
else if(l==s.end())
{
advance(l,-1);
im=*m,il=*l;
a2=im^il;
ans.erase(ans.find(a2));
}
}
s.erase(s.find(x));
}
else if(op==3)
{
cnt=0;
cout<<*ans.begin()<<endl;
}
}
return 0;
}