Pagini recente » Cod sursa (job #1659465) | Cod sursa (job #2540615) | Cod sursa (job #1499120) | Cod sursa (job #2859850) | Cod sursa (job #499383)
Cod sursa(job #499383)
# include <cstdio>
# define verf ++poz == hg ? fread ( ch, 1, hg, stdin ), poz = 0 : 0
const char *FIN = "stramosi.in", *FOU = "stramosi.out" ;
const int MAX = 250000, lim = 31, hg = 1 << 13 ;
int V[lim][MAX] ;
int N, M, poz ;
char ch[hg] ;
inline void cit ( int &x ) {
if ( ch[0] == '\0' ) fread ( ch, 1, hg, stdin ) ;
else for ( ; ch[poz] < '0' || ch[poz] > '9' ; verf ) ;
for ( x = 0 ; ch[poz] >= '0' && ch[poz] <= '9' ; x = x * 10 + ch[poz] - '0', verf ) ;
}
int main ( void ) {
freopen ( FIN, "r", stdin ) ;
freopen ( FOU, "w", stdout ) ;
cit ( N ) , cit ( M ) ;
for ( int i = 1; i <= N; ++i ) {
cit ( V[0][i] ) ;
}
for ( int i = 1; i < lim; ++i ) {
for ( int j = 1; j <= N; ++j ) {
V[i][j] = V[i - 1][ V[i - 1][j] ] ;
}
}
for ( int a, b ; M ; --M ) {
cit ( a ) , cit ( b ) ;
for ( int i = 0; b ; ++i, b >>= 1 ) {
if ( b & 1 ) {
a = V[i][a] ;
}
}
printf ( "%d\n", a ) ;
}
}