Cod sursa(job #1463353)

Utilizator BLz0rDospra Cristian BLz0r Data 20 iulie 2015 19:08:28
Problema Stramosi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.84 kb
#include <cstdio>
#include <cmath>
#include <functional>
using namespace std;

#define Nmax 250002
#define Pmax 20

FILE *f = fopen ( "stramosi.in", "r" );
FILE *g = fopen ( "stramosi.out", "w" );

int D[Pmax][Nmax];

int GetStramos ( int x, int y ){

    int t = x;

    for ( int i = 0; (1 << i) <= y; ++i ){
        if ( y & (1<<i) )
            t = D[i][t];
    }

    return t;
}

int main(){

    int N, M, x, y, lg2;

    fscanf ( f, "%d%d", &N, &M );

    for ( int i = 1; i <= N; ++i )
        fscanf ( f, "%d", &D[0][i] );

    lg2 = log2 (N);

    for ( int i = 1; i <= lg2; ++i )
        for ( int j = 1; j <= N; ++j )
            D[i][j] = D[i-1][D[i-1][j]];

    for ( int i = 1; i <= M; ++i ){
        fscanf ( f, "%d%d", &x, &y );
        fprintf ( g, "%d\n", GetStramos(x,y) );
    }

    return 0;
}