Cod sursa(job #1630697)

Utilizator blackoddAxinie Razvan blackodd Data 5 martie 2016 10:48:06
Problema Stramosi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.61 kb
#include <fstream>

using namespace std;

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

#define MaxL 20
#define MaxN 250001

int dp[MaxL][MaxN]; // dp[i][j] = al (1 << i) -lea stramos al nodului j
int n, m;

int main() {

	fin >> n >> m;
	
	for ( int i = 1; i <= n; ++i )
		fin >> dp[0][i];
		
	for ( int i = 1; (1 << i) <= n; ++i )
		for ( int j = 1; j <= n; ++j )
			dp[i][j] = dp[i - 1][dp[i - 1][j]];
			
	for ( int i = 0, x, y; i < m; ++i ) {
		fin >> x >> y;
		for ( int j = 0; (1 << j) <= y; ++j )
			if ( (1 << j) & y )
				x = dp[j][x];
		fout << x << '\n';
	}

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