Pagini recente » Cod sursa (job #867965) | Cod sursa (job #1938116) | Cod sursa (job #867218) | Cod sursa (job #2471216) | Cod sursa (job #2144169)
#include <bits/stdc++.h>
using namespace std;
int n, m;
int dp[20][250001];
int lg2[250001];
int query(int x, int k ) {
if (k == 0 || x == 0) return x;
return query(dp[lg2[k]][x], k - (1 << lg2[k]));
}
int main() {
freopen("carici.in", "r", stdin);
freopen("stramosi.in", "r", stdin);
freopen("stramosi.out", "w", stdout);
scanf("%d%d", &n, &m);
for (int i = 1; i <= n; i++) {
scanf("%d", &dp[0][i]);
}
lg2[0] = 1;
for (int i = 2; i <= n; i++) {
lg2[i] = lg2[i / 2] + 1;
}
for (int i = 1; i <= lg2[n]; i++) {
for (int j = 1; j <= n; j++) {
dp[i][j] = dp[i - 1][dp[i - 1][j]];
}
}
int x, y;
while (m--) {
scanf("%d%d", &x, &y);
cout << query(x, y) << "\n";
}
return 0;
}