Cod sursa(job #2805692)

Utilizator sireanu_vladSireanu Vlad sireanu_vlad Data 21 noiembrie 2021 18:54:27
Problema Stramosi Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.67 kb
#include <fstream>
using namespace std;

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

int n, m, a[20][250001], lg2[250001];

void read()
{
	in >> n >> m;
	for(int i = 1; i <= n; ++i)
		in >> a[0][i];
}

void prec()
{
	for(int i = 2; i <= n; ++i)
		lg2[i] = lg2[i/2] + 1;

	for(int i = 1; (1<<i) <= n; ++i)
		for(int j = 1; j <= n; ++j)
			a[i][j] = a[i-1][a[i-1][j]];
}

int ancestor(int p, int q)
{
	int k;
	while(p)
	{
		k = lg2[p];
		p -= (1<<k);
		q = a[k][q];
	}
	return q;
}

void afis()
{
	int q, p;
	while(m--)
		in >> q >> p,
		out << ancestor(p, q) << '\n';
}

int main()
{
	read();
	prec();
	afis();
	return 0;
}