Cod sursa(job #974734)

Utilizator tudorv96Tudor Varan tudorv96 Data 18 iulie 2013 09:12:01
Problema Stramosi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.63 kb
#include <fstream>
#include <vector>
using namespace std;

vector <vector <int> > t;
vector <int> bp;
int n, m;

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

int main() {
	fin >> n >> m;
	bp.resize(n+1);
	for (int i = 2; i <= n; ++i)
		bp[i] = bp[i >> 1] + 1;
	t.resize(bp[n]+1);
	for (int i = 0; i <= bp[n]; ++i)
		t[i].resize(n+1);
	for (int i = 1; i <= n; ++i)
		fin >> t[0][i];
	for (int i = 1; i <= bp[n]; ++i)
		for (int j = 1; j <= n; ++j)
			t[i][j] = t[i-1][t[i-1][j]];
	while (m--) {
		int x, y;
		fin >> x >> y;
		while (y) {
			x = t[bp[y]][x];
			y = y - (1 << bp[y]);
		}
		fout << x << "\n";
	}
	fcloseall();
}