AT_abc344_e的题解

(一)

这次 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;
}
posted @   Jerry_heng  阅读(5)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示