Cod sursa(job #3232399)

Utilizator SoulSnorterPetre Robert Cristian SoulSnorter Data 30 mai 2024 06:43:00
Problema Stramosi Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.83 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <cmath>

using namespace std;

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

int query(vector<vector<int>>& sparseTable, int Q, int P)
{
	int i = 0;
	while((1 << i) <= P)
	{
		if(P & (1 << i))
		{
			Q = sparseTable[i][Q];
		}
		i++;
	}

	return Q;
}

int main()
{
	int n, q, Q, P;
	in>> n >> q;

	int p = (int)log2(n);

	vector<vector<int>> sparseTable(p + 1);

	for(int i = 0; i <= p; i++)
	{
		vector<int> new_vec(n + 1);
		sparseTable[i] = new_vec;
	}

	for(int i = 1; i <= n; i++)
	{
		in >> sparseTable[0][i];
	}

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

	for (int i = 0; i < q; i++)
	{
		in>>Q>>P;
		out<<query(sparseTable, Q, P)<<"\n";
	}

	in.close();
	out.close();
}