Pagini recente » Cod sursa (job #1907097) | Cod sursa (job #2519717) | Cod sursa (job #1117258) | Cod sursa (job #3260300) | Cod sursa (job #1474212)
#include <cstdio>
#include <cmath>
#define LOGMAX 20
#define NMAX 250010
#define MMAX 300010
int d[LOGMAX][NMAX]; //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, r;
while (Q) {
r = Q % 2;
if (r == 1) {
P = d[P][x];
}
x++;
Q /= 2;
}
printf ("%d\n", P);
}
return 0;
}