CF1620E Replace the Numbers

CF1620E Replace the Numbers

简单题。对于这种序列修改查询问题,一般有一个静态做法就是倒着做,本题只需记录 \(f_x\) 表示处理了倒着的 \(i\) 个操作后,初值为 \(x\) 最终会变成谁。遇到一个操作 2 就执行 \(f_x = f_y\)。中途还想复杂了,这根本不需要建图或者并查集。

#include<bits/stdc++.h>
#define F(i,l,r) for(int i(l); i <= (r); ++ i)
#define G(i,r,l) for(int i(r); i >= (l); -- i)
using namespace std;
using ll = long long;
const int N = 6e5;
int ans[N], cnt = 0;
int f[N], x[N], y[N], op[N];
void Main(){
	int q, mx = 0;
	cin >> q;
	F(i, 1, q){
		cin >> op[i];
		if(op[i] == 1){
			cin >> x[i];
			++ cnt;
		}
		else{
			cin >> x[i] >> y[i];
			mx = max(mx, y[i]);
		}
	}
	int o = cnt;
	F(i, 1, 500000){
		f[i] = i;
	}
	G(i, q, 1){
		if(op[i] == 1){
			ans[o] = f[x[i]];
			-- o;
		}
		else{
			f[x[i]] = f[y[i]];
		}
	}
	F(i, 1, cnt){
		cout << ans[i] << ' ';
	}
	return ;
}
signed main(){
	ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
	int T = 1;
	while(T --) Main();
	return fflush(0), 0;
}
posted @ 2026-10-19 00:59  superl61  阅读(2)  评论(0)    收藏  举报