思路:用vector里的erase,insert等操作结合二分找点,原题过了

#include<bits/stdc++.h>
using namespace std;
#define mid (l+r+1)/2
#define midr (l+r)/2
#define int long long
vector<int >jihe;
int t,m;
int ans;
int last;
signed main(){
//freopen("P3369_5.in","r",stdin);
cin>>m>>t;
while(m--){
int x;
scanf("%d",&x);
jihe.push_back(x);
}
while(t--){
int opera,n;
scanf("%d%d",&opera,&n);
n^=last;
if (opera==2){
int l=0,r=jihe.size()-1;
while(l<r){
if (jihe[mid]<=n) l=mid;
else r=mid-1;
}
jihe.erase(jihe.begin()+l);
}
if (opera==3){
int l=0,r=jihe.size()-1;
while(l<r){
if (jihe[mid]<n) l=mid;
else r=mid-1;
}
if (jihe[0]>=n) last=1,ans^=1;
else last=l+2,ans^=l+2;
}
if (opera==4) last=jihe[n-1],ans^=jihe[n-1];
if (opera==5){
int l=0,r=jihe.size()-1;
while(l<r){
if (jihe[mid]<n) l=mid;
else r=mid-1;
}
last=jihe[l],ans^=jihe[l];
}
if (opera==6){
int l=0,r=jihe.size()-1;
while(l<r){
if (jihe[midr]>n) r=midr;
else l=midr+1;
}
last=jihe[l],ans^=jihe[l];
}
if (opera==1){
int l=0,r=jihe.size()-1;
while(l<r){
if (jihe[mid]<n) l=mid;
else r=mid-1;
}
if (jihe.size()==0)
jihe.push_back(n);
else if (n>=jihe[jihe.size()-1])
jihe.push_back(n);
else if (jihe[0]>n)
jihe.insert(jihe.begin(),n);
else
jihe.insert(jihe.begin()+l+1,n);
}
}
cout<<ans;
}