Cod sursa(job #3133978)

Utilizator daristyleBejan Darius-Ramon daristyle Data 27 mai 2023 19:53:23
Problema Stramosi Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.72 kb
#include <fstream>

using namespace std;
ifstream fin("stramosi.in");
ofstream fout("stramosi.out");

const int N_MAX = 25e4;
const int LOG_MAX = 18;
int ancestor[LOG_MAX][N_MAX + 1]{};//ancestor[lg][i] = al 2^lg -lea stramos al lui i

int main() {
	int n, querries;
	fin >> n >> querries;
	for(int i = 1; i <= n; ++i)
		fin >> ancestor[0][i];

	for(int lg = 1; (1 << lg) < n; ++lg)
		for(int i = 1; i <= n; ++i)
			ancestor[lg][i] = ancestor[lg - 1][ancestor[lg - 1][i]];

	for(int querry = 0; querry < querries; ++querry){
		int p, q;
		fin >> p >> q;

		for(int lg = LOG_MAX; lg >= 0; --lg)
			if((1 << lg) & q){
				p = ancestor[lg][p];
				q ^= (1 << lg);
			}

		fout << p << '\n';
	}

	fin.close();
	fout.close();
	return 0;
}