Pagini recente » Cod sursa (job #3158964) | Cod sursa (job #3284785) | Cod sursa (job #3284747) | Cod sursa (job #3290289) | Cod sursa (job #3291845)
#include <bits/stdc++.h>
#include <fstream>
using namespace std;
int v[250005];
int anc[20][250005];
bool used[250005];
void dfs(int node) {
used[node] = true;
anc[0][node] = v[node];
for (int i = 1; i <= 18; i++) {
anc[i][node] = anc[i - 1][anc[i - 1][node]];
}
if (!used[node])
dfs(v[node]);
}
int query(int node, int steps) {
for (int i = 18; i >= 0; i--) {
if (steps >= (1 << i)) {
node = anc[i][node];
steps -= (1 << i);
}
}
return node;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
ifstream cin{"stramosi.in"};
ofstream cout{"stramosi.out"};
int N, Q;
cin >> N >> Q;
for (int i = 1; i <= N; i++) {
cin >> v[i];
}
for (int i = 1; i <= N; i++) {
if (!used[i])
dfs(i);
}
while (Q--) {
int x, k;
cin >> x >> k;
cout << query(x, k) << '\n';
}
return 0;
}