Pagini recente » Cod sursa (job #2837682) | Cod sursa (job #2363477) | Cod sursa (job #888646) | Cod sursa (job #16107) | Cod sursa (job #1764235)
#include <cstdio>
using namespace std;
#define NMAX 250005
#define lg_max 18
int lg[ NMAX ];
int stramos[ lg_max ][ NMAX ];
int main()
{
freopen("stramosi.in","r",stdin);
freopen("stramosi.out","w",stdout);
int n, m, i, j, x, y;
scanf("%d%d",&n,&m);
for( i = 1; i <= n; ++i ) scanf("%d",&stramos[ 0 ][ i ]);
for( i = 1; ( 1 << i ) <= n; ++i ){
for( j = 1; j <= n; ++j ){
stramos[ i ][ j ] = stramos[ i - 1 ][ stramos[ i - 1 ][ j ] ];
}
}
for( i = 2; i <= n; ++i )
lg[ i ] = lg[ i / 2 ] + 1;
while( m-- ){
scanf("%d%d",&x,&y);
while( x && y ){
x = stramos[ lg[ y ] ][ x ];
y -= ( 1 << lg[ y ] );
}
printf("%d\n",x);
}
return 0;
}