Pagini recente » Istoria paginii utilizator/florindrumesi | Istoria paginii utilizator/kovacskriszti | Rating Farcasi Alexandru-Vicentiu (Farcasut) | Monitorul de evaluare | Cod sursa (job #337445)
Cod sursa(job #337445)
#include <algorithm>
using namespace std;
#define DIM 250001
#define LOG 18
int n, m, sol[ LOG ][ DIM ];
int calc( int p, int q ) {
int i;
for( i = 0; ( 1 << ( i + 1 ) ) <= q; ++ i );
q -= ( 1 << i );
if( !q )
return sol[ i ][ p ];
return calc( sol[ i ][ p ], q );
}
void calc_sol() {
int i, j;
for( i = 1; i < LOG; ++ i )
for( j = 1; j <= n; ++ j )
sol[ i ][ j ] = sol[ i - 1 ][ sol[ i - 1 ][ j ] ];
}
void solve() {
int i, p, q;
scanf( "%d%d", &n, &m );
for( i = 1; i <= n; ++ i )
scanf( "%d", &sol[ 0 ][ i ] );
calc_sol();
for( i = 0; i < m; ++ i ) {
scanf( "%d%d", &p, &q );
printf( "%d\n", calc( p, q ) );
}
}
int main() {
freopen( "stramosi.in", "r", stdin );
freopen( "stramosi.out", "w", stdout );
solve();
return 0;
}