Cod sursa(job #1764235)

Utilizator din99danyMatei Daniel din99dany Data 25 septembrie 2016 11:53:33
Problema Stramosi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.8 kb
#include <cstdio>
using namespace std;

#define NMAX 250005
#define lg_max 18

int lg[ NMAX ];
int stramos[ lg_max ][ NMAX ];


int main()
{

    freopen("stramosi.in","r",stdin);
    freopen("stramosi.out","w",stdout);

    int n, m, i, j, x, y;

    scanf("%d%d",&n,&m);
    for( i = 1; i <= n; ++i ) scanf("%d",&stramos[ 0 ][ i ]);

    for( i = 1; ( 1 << i ) <= n; ++i ){
        for( j = 1; j <= n; ++j ){
            stramos[ i ][ j ] = stramos[ i - 1 ][ stramos[ i - 1 ][ j ] ];
        }
    }

    for( i = 2; i <= n; ++i )
        lg[ i ] = lg[ i / 2 ] + 1;

    while( m-- ){
        scanf("%d%d",&x,&y);
        while( x && y ){
            x = stramos[ lg[ y ] ][ x ];
            y -= ( 1 << lg[ y ] );
        }
        printf("%d\n",x);
    }

    return 0;

}