Pagini recente » Cod sursa (job #483261) | Cod sursa (job #237313) | Cod sursa (job #2877173) | Cod sursa (job #1132862) | Cod sursa (job #197289)
Cod sursa(job #197289)
#include <stdio.h>
#define QMAX 300005
#define NMAX 250005
#define LOG 18
int M, N;
int P[LOG][NMAX]; // P[a][b] al 2^b-lea parinte a lui a.
int main(void)
{
int i , j , jm1, tmp, parinte, nod, exp, pp2;
freopen("stramosi.in", "r", stdin);
freopen("stramosi.out", "w", stdout);
scanf("%d %d", &N, &M);
for( i = 0; i< N; i++)
scanf("%d", &P[0][i+1]);
for( j = 1, jm1 = 0; j < LOG; ++j, ++jm1)
for( i = 1, N++; i < N; i++)
P[j][i] = P [jm1][ P[jm1][i]];
for( i = 0; i < M; i++){
scanf("%d %d ", &nod, &parinte);
while(parinte){
for (tmp = 1, exp = 0, pp2 = (parinte>>1); tmp <= pp2; tmp <<=1, ++exp);
nod = P[exp][nod], parinte = parinte - tmp;
}
printf("%d\n", nod);
}
return 0;
}