Pagini recente » Cod sursa (job #265747) | Cod sursa (job #2865091) | Cod sursa (job #1534545) | Cod sursa (job #2479710) | Cod sursa (job #1569298)
#include <stdio.h>
#include <vector>
using std::vector;
const int MAX_N = 250000;
const int LOG_MAX_N = 18;
int N, M;
int depth[1 + MAX_N];
int father[1 + LOG_MAX_N][1 + MAX_N];
int main() {
int i, j;
freopen("stramosi.in", "r", stdin);
freopen("stramosi.out", "w", stdout);
scanf("%d %d", &N, &M);
for (i = 1; i <= N; i++) {
scanf("%d", &father[0][i]);
}
for (i = 1; i <= LOG_MAX_N; i++) {
for (j = 1; j <= N; j++) {
father[i][j] = father[i - 1][father[i - 1][j]];
}
}
for (i = 1; i <= M; i++) {
int node, level;
scanf("%d %d", &node, &level);
for (j = 0; level > 0; j++, level >>= 1) {
if ((level & 1) > 0) {
node = father[j][node];
}
}
printf("%d\n", node);
}
return 0;
}