Cod sursa(job #3301707)

Utilizator Ruxandra009Ruxandra Vasilescu Ruxandra009 Data 29 iunie 2025 12:19:49
Problema Stramosi Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.67 kb
#include <fstream>

using namespace std;

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

const int nmax = 3e5 + 5;
int n, q, dp[nmax][20], t[nmax];

void precalc()
{
	for (int i = 1; i <= n; i++)
		dp[i][0] = t[i];

	for (int b = 1; (1 << b) <= n; b++)
		for (int i = 1; i <= n; i++)
			dp[i][b] = dp[dp[i][b - 1]][b - 1];
}

int dist(int nod, int nr)
{
	for (int b = 0; (1 << b) <= n; b++)
		if ((1 << b) & nr)
			nod = dp[nod][b];

	return nod;
}

int main()
{
	f >> n >> q;
	for (int i = 1; i <= n; i++)
		f >> t[i];

	precalc();

	for (; q >= 1; q--)
	{
		int nod, nr; f >> nod >> nr;
		g << dist(nod, nr) << '\n';
	}
	return 0;
}