Cod sursa(job #956178)

Utilizator dunhillLotus Plant dunhill Data 2 iunie 2013 14:19:22
Problema Stramosi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.6 kb
#include <cstdio>
using namespace std;

int N, M, i, j, p, P, Q, x, pw;
int T[21][250001];

int main() {
	freopen("stramosi.in","r",stdin);
	freopen("stramosi.out","w",stdout);
	scanf("%d%d", &N, &M);
	for (p = 1; 2 * p <= N; p *= 2, ++pw);
	for (i = 1; i <= N; ++i) scanf("%d", &T[0][i]);
	for (j = 1; j <= pw; ++j)
		for (i = 1; i <= N; ++i)
			T[j][i] = T[j - 1][T[j - 1][i]];
	for (; M > 0; --M) {
		scanf("%d%d", &Q, &P); 
		x = Q;
		for (p = 1, i = 0; 2 * p <= P; p *= 2, ++i);
		for (; p > 0 && P > 0; p /= 2, --i) if (p <= P) x = T[i][x], P -= p;
		printf("%d\n", x);
	}
	return 0;
}