ABC344E
这题要求我们在某个数字后面插入数字或删除某个数字,很容易想到链表。
不过正常的链表没法记录每个数的位置,要额外记录。
剩下的就是正常的链表操作了。
注意数组要开大,因为可能会插入更多数。
#include<bits/stdc++.h>
using namespace std;
int nxt[400010];
int lst[400010];
long long num[400010];
map<long long,int>pl;
int np;
int n,q;
int fr=1;
int cnt;
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>num[i];
pl[num[i]]=i;
nxt[i-1]=i;
lst[i]=i-1;
}
np=n;
cin>>q;
int val;
long long aa,bb,aap;
fr=1;
cnt=n;
while(q--){
cin>>val;
if(val==1){
cnt++;
cin>>aa>>bb;
np++;
aap=pl[aa];
pl[bb]=np;
num[np]=bb;
lst[np]=aap;
nxt[np]=nxt[aap];
nxt[aap]=np;
lst[nxt[np]]=np;
}else{
cnt--;
cin>>aa;
aap=pl[aa];
if(fr==aap){
fr=nxt[aap];
}
pl[aa]=0;
nxt[lst[aap]]=nxt[aap];
lst[nxt[aap]]=lst[aap];
}
}
int tp=fr;
while(cnt){
cout<<num[tp]<<" ";
tp=nxt[tp];
cnt--;
}
return 0;
}