Pagini recente » Cod sursa (job #2013908) | Cod sursa (job #365090) | Cod sursa (job #892114) | Cod sursa (job #534376) | Cod sursa (job #1289791)
#include <stdio.h>
#define NMax 250010
#define LogNMax 19
const char IN[] = "stramosi.in", OUT[] = "stramosi.out";
int N, M;
int P[NMax][LogNMax];
int search( int x, int p ) {
int step;
for ( step = 1; ( 1 << step ) < p; ++ step );
for ( int i = 0; step >= 0; -- step )
if ( i + ( 1<< step ) <= p ) {
i += ( 1<< step );
x = P[x][step];
}
return x;
}
int main() {
freopen(IN, "r", stdin);
freopen(OUT, "w", stdout);
scanf("%d%d", &N, &M);
for ( int i = 1; i <= N; ++ i )
scanf("%d", &P[i][0]);
for ( int j = 1; j < LogNMax; ++ j )
for ( int i = 1; i <= N; ++ i )
P[i][j] = P[P[i][j - 1]][j - 1];
for ( int i = 1; i <= M; ++ i ) {
int x, p;
scanf("%d%d", &x, &p);
printf("%d\n", search(x, p));
}
return 0;
}