E. Replace the Numbers
开始想到了一个二分的做法 好像是O(nlog)的 后来才想了一下可以在两个数组之间反复横跳
那我是不是像记忆化搜索一样 记录一个路径即可
我们记录f[i]表示的就是当前i点的颜色为什么
显然我们正着做需要知道后面的状况 那我们就可以离线下来倒着做
#include <bits/stdc++.h>
using namespace std;
const int N = 1e6+10;
const int M = 998244353;
const int mod = 998244353;
#define int long long
#define endl '\n'
#define all(x) (x).begin(),(x).end()
#define YES cout<<"YES"<<endl;
#define NO cout<<"NO"<<endl;
#define _ 0
#define pi acos(-1)
#define INF 0x3f3f3f3f3f3f3f3f
#define fast ios::sync_with_stdio(false);cin.tie(nullptr);
vector<int>op(N),f(N),x(N),y(N);
void solve() {
int q;cin>>q;
for(int i=1;i<=N;i++)f[i]=i;
for(int i=1;i<=q;i++){
cin>>op[i];
if(op[i]==1){
cin>>x[i];
}else {
cin>>x[i]>>y[i];
}
}
vector<int>ans;
for(int i=q;i>=1;i--){
if(op[i]==1){
ans.push_back(f[x[i]]);
}else{
f[x[i]]=f[y[i]];
}
}
for(int i=ans.size()-1;i>=0;i--)cout<<ans[i]<<' ';
}
signed main(){
fast
int T;T=1;
while(T--) {
solve();
}
return ~~(0^_^0);
}
标签:Educational,const,int,Codeforces,cin,op,119,define
From: https://www.cnblogs.com/ycllz/p/16717193.html