ABC344E 题解

思路

由题面我们容易联想到链表。

但是我们显然不能直接写个链表,因为这样不仅不好查找,而且写起来也不方便。

这时我们就要使用 map,设 mpimp_i 表示 ii 的后一个数(即后缀)。

同理 preipre_i 表示 ii 的前缀。

ii 表示的是数字,不是下标!

代码实现

为什么要记录 prepre?因为这样在删除时可以 O(1)\operatorname{O}(1) 删除,否则需要在队伍中查找后删除,时间复杂度劣。

同时,如果删除的是第一个元素,要将队头进行修改。

Code

#include<iostream>
#include<map>
using namespace std;
map<int,int>mp;
map<int,int>pre;
int q,n,head;
int a[200005];
int main() {
	cin>>n;
	for(int i=1; i<=n; i++) {
		cin>>a[i];
		mp[a[i-1]]=a[i];
		pre[a[i]]=a[i-1];
	}
	head=a[1];
	cin>>q;
	while(q--) {
		int opt,x,y;
		cin>>opt>>x;
		if(opt==1) {
			cin>>y;
			mp[y]=mp[x];
			pre[y]=x;
			pre[mp[y]]=y;
			mp[x]=y;
		} else {
			if(head==x) {
				y=mp[x];
				mp[pre[x]]=y;
				pre[y]=pre[x];
				head=y;
			} else {
				y=mp[x];
				mp[pre[x]]=y;
				pre[y]=pre[x];
			}
		}
	}
	int _=head;
	while(mp[_]!=0) {
		cout<<_<<' ';
		_=mp[_];
	}
	cout<<_;
	return 0;
}
posted @   Weslie_qwq  阅读(3)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示