Cod sursa(job #856114)

Utilizator Theorytheo .c Theory Data 15 ianuarie 2013 22:32:07
Problema Stramosi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.81 kb
#include<fstream>

using namespace std;

ifstream fin("stramosi.in");
ofstream fout("stramosi.out");


#define NMAX 250009
int N; int M;
int TT[NMAX];
int lg[NMAX];
int A[20][NMAX];

void Solve() {

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

    for(int i = 1; i <= N; i++)
        A[0][i] = TT[i];

    for(int i = 1; i <= lg[N]; i++)
        for(int j = 1; j <= N; j++)
        A[i][j] = A[i - 1][A[i - 1][j]];

    for(int i = 1; i <= M; i++) {
        int x,y ;
        fin >>x >> y;
        while(y){
            x = A[lg[y]][x];
            y -= (1 << lg[y]);
        }
        fout << x <<'\n';
    }
}


void Read() {

    fin >> N>> M;
    for(int i = 1; i <= N; i++)
        fin >>TT[i];
}


int main() {

    Read();

    Solve ();

    return 0;
}