Do not why getting wrong ans
#include <iostream>
#include<bits/stdc++.h>
#define ll long long int
#define mod 1000000007
using namespace std;
ll power(ll a, ll b) {
ll res = 1;
while (b) {
if (b & 1) {
res = res * a % mod;
}
b >>= 1;
a = a * a % mod;
}
return res;
}
ll inv(ll a) {
return power(a, mod - 2);
}
class DisjointSet {
vector<int> rank, parent;
public:
DisjointSet(int n) {
parent.resize(n + 1);
for (int i = 0; i <= n; i++) {
parent[i] = i;
}
}
int findUPar(int node) {
if (node == parent[node])return node;
return parent[node] = findUPar(parent[node]);
}
void unionByRank(int u, int v) {
parent[u]=v;
}
};
int main() {
int t;cin>>t;
while(t--){
int n;cin>>n;
int A[n+1];
for(int i=1;i<=n;i++){
cin>>A[i];
}
DisjointSet ds(n);
int q;cin>>q;
while(q--){
int x;cin>>x;
if(x==0){
int a,b;cin>>a>>b;
int ap=ds.findUPar(a);
int bp=ds.findUPar(b);
if(ap==bp){
cout<<"Invalid query!\n";
}
else {
if(A[a]<A[b])ds.unionByRank(ap,bp);
else if(A[a]>A[b])ds.unionByRank(bp,ap);
}
}
else {
int y;cin>>y;
int ans=ds.findUPar(y);
cout<<ans<<endl;
}
}
}
cerr << "Time : " << 1000 * ((double)clock()) / CLOCKS_PER_SEC << "ms" << endl;
return 0;
}