Cod sursa(job #634615)

Utilizator sebii_cSebastian Claici sebii_c Data 16 noiembrie 2011 19:31:28
Problema Stramosi Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.73 kb
#include <fstream>
using namespace std;

#define NMAX 250005
#define LgMax 19 

int A[LgMax][NMAX], Log2[NMAX];
int N;

void computeLog()
{
    int i;
    for (i=2; i<NMAX; ++i)
	Log2[i] = Log2[i/2] + 1;
}

void computeA()
{
    int i, j;
    for (i = 1; i <= Log2[N]; ++i)
	for (j = 1; j <= N; ++j)
	    A[i][j] = A[i-1][A[i-1][j]];
}

int find(int x, int k)
{
    while (k > 0) {
	x = A[Log2[k]][x];
	k -= (1<<Log2[k]);
    }
    return x;
}
    
int main()
{
    ifstream fin("stramosi.in");
    ofstream fout("stramosi.out");
    int M, i, x, k;
    fin >> N >> M;
    for (i=1; i<=N; ++i) 
	fin >> A[0][i];
    
    computeLog();
    computeA();
    for ( ; M>0; --M) {
	fin >> x >> k;
	fout << find(x, k) << "\n";
    }
 
    return 0;
}