Cod sursa(job #1653851)

Utilizator AlexandraaaaMereu Alexandra Alexandraaaa Data 16 martie 2016 17:28:00
Problema Stramosi Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.8 kb
#include <iostream>
#include <vector>
#include <fstream>
#include <string>
#define maxN 250000 + 5

using namespace std;

int S[maxN][30];

int log(int n){
	int a = 0, b = 1;
	while ((b << 1) <= n){
		a++;
		b <<= 1;
	}
	return a;
}

int vezi(int q, int p){
	int nr, t;
	nr = p;
	t = q;
	while (nr != 0){
		int x = log(nr);
		t = S[t][x];
		nr -= (1 << x);
	}
	return t;
}

int main()
{
	ifstream f("stramosi.in");
	ofstream g("stramosi.out");

	int n, m;

	f >> n >> m;
	for (int i = 1; i <= n; ++i)
		f >> S[i][0];

	int lim = log(n);
	for (int j = 1; j <= lim; ++j)
		for (int i = 1; i <= n; ++i)
			S[i][j] = S[S[i][j - 1]][j - 1];

	for (int k = 0; k < m; ++k){
		int x, y;
		f >> x >> y;
		g << vezi(x, y) << "\n";
	}


	f.close();
	g.close();

	return 0;
}