Pagini recente » Cod sursa (job #2601764) | Cod sursa (job #916898) | Cod sursa (job #1277549) | Cod sursa (job #2459714) | Cod sursa (job #1463353)
#include <cstdio>
#include <cmath>
#include <functional>
using namespace std;
#define Nmax 250002
#define Pmax 20
FILE *f = fopen ( "stramosi.in", "r" );
FILE *g = fopen ( "stramosi.out", "w" );
int D[Pmax][Nmax];
int GetStramos ( int x, int y ){
int t = x;
for ( int i = 0; (1 << i) <= y; ++i ){
if ( y & (1<<i) )
t = D[i][t];
}
return t;
}
int main(){
int N, M, x, y, lg2;
fscanf ( f, "%d%d", &N, &M );
for ( int i = 1; i <= N; ++i )
fscanf ( f, "%d", &D[0][i] );
lg2 = log2 (N);
for ( int i = 1; i <= lg2; ++i )
for ( int j = 1; j <= N; ++j )
D[i][j] = D[i-1][D[i-1][j]];
for ( int i = 1; i <= M; ++i ){
fscanf ( f, "%d%d", &x, &y );
fprintf ( g, "%d\n", GetStramos(x,y) );
}
return 0;
}