Cod sursa(job #3128980)

Utilizator AlexandruIoan20Moraru Ioan Alexandru AlexandruIoan20 Data 11 mai 2023 20:30:43
Problema Stramosi Scor 50
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.71 kb
#include <fstream>
using namespace std; 

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

int N, M, v[250100], a[30][250100]; 

void generare() {
	for (int i = 1; i <= N; i++)
		a[1][i] = v[i];

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

int  query(int p, int  q) {
	int nod = p;
	for (int i = 1; i <= 20; i++) {
		if (q & (1 << (i - 1))) {
			nod = a[i][nod]; 
		}
	}

	return nod;
}

int main()
{
	fin >> N >> M;
	for (int i = 1; i <= N; i++)
		fin >> v[i];

	generare(); 

	for (int i = 1; i <= M; i++) {
		int p, q; 
		fin >> p >> q; 
		fout << query(p, q) << '\n'; 
	}
	return 0;
}