Cod sursa(job #1723842)

Utilizator andreiSevastreAndrei Sevastre andreiSevastre Data 1 iulie 2016 16:56:31
Problema Stramosi Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.6 kb
#include <iostream> 

using namespace std;

int v[250010][19];
int n, m, q, p;

int main ()
{
	freopen ("stramosi.in", "r", stdin);
	freopen ("stramosi.out", "w", stdout);
	
	
	scanf("%d%d", &n,&m);
	
	for(int i=1; i<=n;i++)
	{
		scanf("%d", &v[i][0]);
	}
	
	for(int i=1; i<=18; i++)
	{
		for(int j=1; j<=n; j++)
		{
			v[j][i]=v[v[j][i - 1]][i - 1];
		}
	}
	
	for(int i=1;i<=m;i++)
	{
		scanf("%d%d", &q, &p);
		
		while (q && p) {
			int t = 0;
			while (p > (1 << (t + 1))) {
				t++;
			}
			
			q = v[q][t];
			p -= (1 << t);
		}
		printf("%d\n", q);
	}
	return 0;
}