Cod sursa(job #266995)

Utilizator silvia_the_bestSilvia Pripoae silvia_the_best Data 26 februarie 2009 16:41:53
Problema Stramosi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.96 kb
#include <cstdio>
#define FIN "stramosi.in"
#define FOUT "stramosi.out"
#define N 250007
#define L 18
int a[L][N],n,m;

void calc()
{
    int i,j;
	for ( i = 1; i < L; ++i)
		for (j = 1; j <= n; ++j)
            a[i][j] = a[i - 1][ a[i - 1][j] ];
}
/*
int solve(int q, int p)//stramosul p al lui q
{
	if(p == 0)
		return q;
	if(p & 1)
		return solve(a[][])
	return a[calc()][q];
}
*/
int solve(int q, int p)//stramosul p al lui q
{
	//a[i][j] = al 2 ^ i - lea stramos al lui j
	int i = 0;
	while(p)
	{
		if(p & 1)
			q = a[i][q];
		++i;
		p >>= 1;
	}
	return q;
}

void write()
{
    int i,p,q;
    for (i = 1; i <= m; ++i)
    {
        scanf("%d %d", &q, &p);
        printf("%d\n", solve(q,p));
    }
}

int main()
{
    int i;
    freopen(FIN, "r", stdin);
    freopen(FOUT, "w", stdout);

    scanf("%d %d", &n, &m);
    for (i = 1; i <= n; ++i)
        scanf("%d", &a[0][i]);
    calc();
	write();
	return 0;
}