Pagini recente » Cod sursa (job #680332) | Cod sursa (job #1253726) | Cod sursa (job #2831616) | Cod sursa (job #1211198) | Cod sursa (job #1474603)
#include <cstdio>
#include <cmath>
#define LOGMAX 20
#define NMAX 250010
#define MMAX 300010
int d[NMAX][LOGMAX]; //d[i][j] = al 2^j -lea stramos al lui i
int N, M, P, Q;
int logN;
int main () {
freopen ("stramosi.in", "r", stdin);
freopen ("stramosi.out", "w", stdout);
scanf ("%d%d", &N, &M);
for (int i = 1; i <= N; i++) {
scanf ("%d", &d[i][0]);
}
logN = (int) ceil (log (N) / log (2));
for (int j = 1; j <= logN; j++) {
for (int i = 1; i <= N; i++) {
d[i][j] = d[d[i][j - 1]][j - 1];
}
}
while (M--) {
scanf ("%d%d", &P, &Q);
int x = 0;
while (Q) {
if (Q & 1) {
P = d[P][x];
}
x++;
Q >>= 1;
}
printf ("%d\n", P);
}
return 0;
}