Cod sursa(job #200409)

Utilizator alex_mircescuAlex Mircescu alex_mircescu Data 23 iulie 2008 20:24:19
Problema Stramosi Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.7 kb
#include <stdio.h>
#include <math.h>

#define MAXN 300000
#define MAXL 100

long n, m, j, q, t, p, i, v[MAXL + 1][MAXN];

int main() {
	freopen("stramosi.in","r",stdin);
    freopen("stramosi.out","w",stdout);
    scanf("%ld %ld", &n, &m);
    for (i = 1; i <= n; ++i) {
		scanf("%ld", &v[0][i]);
	}
    for (i = 1; i <= MAXL; ++i) {
        for (j = 1; j <= n; ++j) {
            v[i][j] = v[i - 1][v[i - 1][j]];
		}
	}
    for (i = 1; i <= m; ++i) {
        scanf("%ld %ld ", &q, &p);
        while (p && q) {
            t = 0;
            while(1 << (t + 1) < p) {
				++t;
			}
            q = v[t][q];
			p -= 1 << t;
        }
        printf("%ld\n", q);
    }
    return 0;
}