Pagini recente » Cod sursa (job #2943029) | Cod sursa (job #646331) | Cod sursa (job #1166155) | Cod sursa (job #526019) | Cod sursa (job #2695403)
// Mihai Priboi
#include <bits/stdc++.h>
#define MAXN 250000
#define MAXPOW 17
int stramosi[MAXPOW + 1][MAXN + 1];
int main() {
FILE *fin, *fout;
int n, m, i, pow, q, p;
fin = fopen( "stramosi.in", "r" );
fout = fopen( "stramosi.out", "w" );
fscanf( fin, "%d%d", &n, &m );
for( i = 1; i <= n; i++ )
fscanf( fin, "%d", &stramosi[0][i] );
// cream matrice cu stramosi la distante puteri ale lui 2
for( pow = 1; pow <= MAXPOW; pow++ )
for( i = 1; i <= n; i++ )
stramosi[pow][i] = stramosi[pow - 1][stramosi[pow - 1][i]];
for( i = 0; i < m; i++ ) {
fscanf( fin, "%d %d", &q, &p );
for( pow = MAXPOW; pow >= 0; pow-- ) {
if( p >= 1 << pow ) {
q = stramosi[pow][q];
p -= 1 << pow;
}
}
fprintf( fout, "%d\n", q );
}
fclose( fin );
fclose( fout );
return 0;
}