Cod sursa(job #179435)

Utilizator anoukAnca Dumitrache anouk Data 15 aprilie 2008 22:03:48
Problema Stramosi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.76 kb
#include <cstdio>
#include <iostream>
#define DIM 260000
using namespace std;

int N, K, P, Q, S[DIM][19], log[DIM], sol;

int main()
{
	FILE *fin = fopen("stramosi.in", "r");
	FILE *fout = fopen("stramosi.out", "w");

	fscanf(fin, "%d%d", &N, &K);
	for (int i = 1; i <= N; i++)
		fscanf(fin, "%d", &S[i][0]);

	for (int i = 2; i <= N; i++)
		log[i] = log[i / 2] + 1;
	for (int i = 1; i <= N; i++)
		for (int j = 1; j <= log[N]; j++)
		{
			if (!S[S[i][j - 1]][j - 1]) break;
			S[i][j] = S[S[i][j - 1]][j - 1];
		}
	//cout << N << " " << K; cin.get();
	for (int i = 1; i <= K; i++)
	{
		fscanf(fin, "%d%d", &Q, &P);
		while (P)
		{
			sol = S[Q][log[P]];
			P -= (1 << (log[P]));
			Q = sol;
		}
		fprintf(fout, "%d\n", sol);
	}

	fclose(fin);
	fclose(fout);
	return 0;
}