Cod sursa(job #61044)

Utilizator risenshineAkil Nasser risenshine Data 17 mai 2007 22:46:52
Problema Stramosi Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 0.61 kb
#include <stdio.h>
#define NMAX 250001

int N, M, P, Q;
int a[20][NMAX];

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