求Hack
查看原帖
求Hack
376679
初星逝者楼主2024/3/15 21:12

mpmp 的 pairpair 表示左右两个的连接的节点

#include <bits/stdc++.h>
using namespace std;

int n,q;
map<int,pair<int,int>> mp;
int a[200005];
int s;

signed main(){
//	ios::sync_with_stdio(false);
//	cin.tie(0),cout.tie(0);
	cin >> n;
	for(int i=1;i<=n;i++){
		cin >> a[i];
	}
	s=a[1];
	for(int i=1;i<=n;i++){
		mp[a[i]]={a[i-1],a[i+1]};
	}
	cin >> q;
	for(int i=1;i<=q;i++){
		int op,x,y;
		cin >> op >> x;
		if(op==1)cin >> y;
		if(op==1){
			if(y!=0)mp[y]={x,mp[x].second};
			if(mp[x].second!=0)mp[mp[x].second]={y,mp[mp[x].second].second};
			if(x!=0)mp[x]={mp[x].first,y};
		}
		else{
			int xx=mp[x].first,yy=mp[x].second;
			if(s==x)s=yy;
			if(xx!=0)mp[xx]={mp[xx].first,yy};
			if(yy!=0)mp[yy]={xx,mp[yy].second};
		}
	}
	while(mp[s].first!=0||mp[s].second!=0){
		cout<<s<<" ";
		s=mp[s].second;
		if(s==0)break;
	}
	return 0;
}
2024/3/15 21:12
加载中...