Pagini recente » Cod sursa (job #816234) | Cod sursa (job #1197118) | Cod sursa (job #2099515) | Cod sursa (job #1408021) | Cod sursa (job #1488962)
#include <cstdio>
#include <cmath>
#define LOGMAX 20
#define NMAX 250010
#define MMAX 300010
int d[LOGMAX][NMAX]; //d[i][j] = al 2^i -lea stramos al lui j
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[0][i]);
}
logN = (int) ceil (log (N) / log (2));
for (int i = 1; i <= logN; i++) {
for (int j = 1; j <= N; j++) {
d[i][j] = d[i - 1][d[i - 1][j]];
}
}
while (M--) {
scanf ("%d%d", &P, &Q);
int x = 0;
while (Q) {
if (Q & 1) {
P = d[x][P];
}
x++;
Q >>= 1;
}
printf ("%d\n", P);
}
return 0;
}