Pagini recente » Cod sursa (job #1341435) | Cod sursa (job #462344) | Cod sursa (job #2496755) | Cod sursa (job #1901766) | Cod sursa (job #634619)
Cod sursa(job #634619)
#include<stdio.h>
#define NMAX 250005
#define LgMax 19
int A[20][NMAX];
int N;
char buffer[(1<<21)];
void computeA()
{
int i, j;
for (i = 1; i <= LgMax; ++i)
for (j = 1; j <= N; ++j)
A[i][j] = A[i-1][A[i-1][j]];
}
int find(int x, int k)
{
int i;
for (i = 0; i<=LgMax; ++i)
if ((k >> i) & 1)
x = A[i][x];
return x;
}
int main()
{
freopen("stramosi.in", "r", stdin);
freopen("stramosi.out", "w", stdout);
int M, i, x, k, res, id = 0;
scanf("%d %d\n", &N, &M);
fgets(buffer, (1<<21), stdin);
for (i=1; i<=N; ) {
res = 0;
for (; buffer[id] >= '0' && buffer[id] <= '9'; ++id)
res = res*10 + buffer[id] - '0';
A[0][i++] = res;
++id;
}
computeA();
for ( ; M>0; --M) {
scanf("%d %d", &x, &k);
printf("%d\n", find(x, k));
}
return 0;
}