Cod sursa(job #2181816)

Utilizator dorin31Geman Dorin Andrei dorin31 Data 21 martie 2018 21:05:31
Problema Stramosi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.81 kb
#include <iostream>
#include <fstream>
#define logN 20
#define maxN 250250

using namespace std;

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

int N, M, Q, P, lgN, maxLog;
int a[logN][maxN];

void readData() {
	fin >> N >> M;
	for (int i = 1 ; i <= N ; ++i)
		fin >> a[1][i];
	for (lgN = 1 ; (1<<lgN) < N ; ++lgN);
}

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

int main() {
	readData();
	buildMatrix();
	while (M--) {
		fin >> Q >> P;
		while (P) {
			for (maxLog = 0 ; (1<<maxLog) <= P ; ++maxLog);
			maxLog--;
			P = P - (1<<maxLog);
			Q = a[maxLog+1][Q];
		}
		fout << Q << '\n';
	}
	// for (int i = 1 ; i <= lgN ; ++i) {
	// 	for (int j = 1 ; j <= N ; ++j)
	// 		cout << a[i][j] << ' ';
	// 	cout << '\n';
	// }
	return 0;
}