Cod sursa(job #2701098)

Utilizator andrei_marciucMarciuc Andrei andrei_marciuc Data 29 ianuarie 2021 20:22:35
Problema Stramosi Scor 10
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.93 kb
#include <stdio.h>
int a[ 18 ][ 250001 ];
int n, m;
FILE *fin;

void fastread( int &x ){
    register int c;
    x = 0;
    c = fgetc( fin );
    for( ; ( c > 47 && c < 58 ); c = fgetc( fin ) )
        x = ( x << 1 ) + ( x << 3 ) + c - 48;
}

int main()
{
    fin = fopen( "stramosi.in", "r" );
    fastread( n );
    fastread( m );
    for( int i = 1; i <= n; i++ )
        fastread( a[ 0 ][ i ] );
    for( int l = 1; l < 18; l++ )
        for( int c = 1; c <= n; c++ )
            a[ l ][ c ] = a[ l - 1 ][ a[ l - 1 ][ c ] ];
    FILE *fout = fopen( "stramosi.out", "w" );
    for( int i = 0; i < m; i++ ){
        int q, p;
        fastread( q );
        fastread( p );
        for( int l = 17; l >= 0; l-- )
            if( p >= 1 << l ){
                q = a[ l ][ q ];
                p -= 1 << l;
            }
        fprintf( fout, "%d\n", q );
    }
    fclose( fin );
    fclose( fout );
 	return 0;
}