Pagini recente » Cod sursa (job #3254822) | Cod sursa (job #3289108) | Cod sursa (job #3215592) | Cod sursa (job #300782) | Cod sursa (job #3233795)
#include "bits/stdc++.h"
using i64 = long long;
std::vector<std::vector<int>> up;
int LOG = 1;
void init(int n) {
while ((1 << LOG) <= n) LOG++;
up = std::vector<std::vector<int>>(n + 1, std::vector<int>(LOG));
}
void bld(int n) {
for (int k = 1; k < LOG; ++k) {
for (int i = 1; i <= n; ++i) {
up[i][k] = up[up[i][k - 1]][k - 1];
}
}
}
int jump(int node, int k) {
int jmp_to = node;
for (int bit = 0; bit < LOG; ++bit) {
if (k & (1 << bit)) {
jmp_to = up[jmp_to][bit];
}
}
return jmp_to;
}
int main() {
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr);
freopen("stramosi.in", "r", stdin);
freopen("stramosi.out", "w", stdout);
int n, q;
std::cin >> n >> q;
init(n);
for (int i = 1; i <= n; ++i) {
int x;
std::cin >> x;
up[i][0] = x;
}
bld(n);
while (q--) {
int node, k;
std::cin >> node >> k;
std::cout << jump(node, k) << "\n";
}
return 0;
}