Pagini recente » Cod sursa (job #3308122) | Monitorul de evaluare | Cod sursa (job #3327485) | Profil Timotei | Cod sursa (job #3338241)
#include <stdio.h>
int up[250002][19];
int main() {
FILE *fin, *fout;
int n, m, q, p, i;
fin = fopen( "stramosi.in", "r" );
fscanf( fin, "%d%d", &n, &m );
for ( i = 1; i <= n; i++ )
fscanf( fin, "%d", &up[i][0] );
for ( q = 1; q < 19; q++ )
for ( i = 1; i <= n; i++ )
up[i][q] = up[up[i][q - 1]][q - 1];
fout = fopen( "stramosi.out", "w" );
for ( ; m > 0; m-- ) {
fscanf( fin, "%d%d", &q, &p );
for ( i = 0; i < 19 && q; i++ )
if ( p & (1 << i) )
q = up[q][i];
fprintf( fout, "%d\n", q );
}
fclose( fin );
fclose( fout );
return 0;
}