Pagini recente » Cod sursa (job #2024149) | Cod sursa (job #634614)
Cod sursa(job #634614)
#include <stdio.h>
#define NMAX 250010
#define LgMax 20
int A[LgMax][NMAX], Log2[NMAX];
int N;
void computeLog()
{
int i;
for (i=2; i<NMAX; ++i)
Log2[i] = Log2[i/2] + 1;
}
void computeA()
{
int i, j;
for (i = 1; i <= Log2[N]; ++i)
for (j = 1; j <= N; ++j)
A[i][j] = A[i-1][A[i-1][j]];
}
int find(int x, int k)
{
while (k > 0) {
x = A[Log2[k]][x];
k -= (1<<Log2[k]);
}
return x;
}
int main()
{
freopen("stramosi.in", "r", stdin);
freopen("stramosi.out", "w", stdout);
int M, i, x, k;
scanf("%d %d", &N, &M);
for (i=1; i<=N; ++i)
scanf("%d", &A[0][i]);
computeLog();
computeA();
for (i=1; i<=M; ++i) {
scanf("%d %d", &x, &k);
printf("%d\n", find(x, k));
}
return 0;
}