(一)
这次 ABC 有点水。
每个数记录前面那个数,和后面那个数。
对于每个数,开个数组记录值,用 map 记录一个值的位置
(二)
AC 代码。
#include<bits/stdc++.h>
#define int long long
using namespace std;
int pre[400010],cnt,las[400010],a[400010],n,q;
map<int,int>mp;
signed main(){
scanf("%lld",&n);
for(int i=1;i<=n;i++)scanf("%lld",&a[i]),mp[a[i]]=i;
cnt=n+2;
for(int i=1;i<=n;i++)pre[i]=i-1,las[i]=i+1;
las[0]=1,pre[n+1]=n;
scanf("%lld",&q);
while(q--){
int op,x,y;
scanf("%lld%lld",&op,&x);
if(op==2){
int pos=mp[x];
int l=pre[pos],r=las[pos];
mp[x]=0;
pre[r]=l,las[l]=r;
}
else{
scanf("%lld",&y);
int pos=mp[x];
mp[y]=++cnt;
a[cnt]=y;
pre[cnt]=pos,las[cnt]=las[pos];
las[pos]=cnt;pre[las[cnt]]=cnt;
}
}
int now=las[0];
while(now!=n+1){
printf("%lld ",a[now]);
now=las[now];
}
return 0;
}
标签:记录,int,题解,long,abc344,400010
From: https://www.cnblogs.com/Jh763878/p/18098696