Cod sursa(job #1256893)

Utilizator killer301Ioan Andrei Nicolae killer301 Data 6 noiembrie 2014 23:13:46
Problema Stramosi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.67 kb
#include <cstdio>

using namespace std;

const int nmax=250005;
const int amax=20;

int n;
int a[nmax];
int d[nmax][amax];

void Dinamica()
{
	for(int i=1;i<=n;i++)
		d[i][0]=a[i];
	for(int i=1;i<=n;i++)
		for(int j=1;(1<<j)<nmax;j++)
			d[i][j]=d[d[i][j-1]][j-1];
}

int main()
{
    freopen("stramosi.in", "r", stdin);
    freopen("stramosi.out", "w", stdout);
    int m;
    scanf("%d%d", &n, &m);
    for(int i=1;i<=n;i++)
		scanf("%d", &a[i]);
	Dinamica();
	for(int i=0;i<m;i++)
	{
		int k, nr;
		scanf("%d%d", &k, &nr);
		int x=0;
		while(nr)
		{
			if(nr&1)k=d[k][x];
			x++;
			nr=nr>>1;
		}
		printf("%d\n", k);
	}
    return 0;
}