Cod sursa(job #1474212)

Utilizator andreea_zahariaAndreea Zaharia andreea_zaharia Data 21 august 2015 15:08:26
Problema Stramosi Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.88 kb
#include <cstdio>
#include <cmath>

#define LOGMAX 20
#define NMAX 250010
#define MMAX 300010

int d[LOGMAX][NMAX]; //d[i][j] = al 2^j -lea stramos al lui i

int N, M, P, Q;
int logN;

int main () {
    freopen ("stramosi.in", "r", stdin);
    freopen ("stramosi.out", "w", stdout);

    scanf ("%d%d", &N, &M);
    for (int i = 1; i <= N; i++) {
        scanf ("%d", &d[i][0]);
    }

    logN = (int) ceil (log (N) / log (2));

    for (int j = 1; j <= logN; j++) {
        for (int i = 1; i <= N; i++) {
            d[i][j] = d[d[i][j - 1]][j - 1];
        }
    }

    while (M--) {
        scanf ("%d%d", &P, &Q);

        int x = 0, r;
        while (Q) {
            r = Q % 2;

            if (r == 1) {
                P = d[P][x];
            }
            x++;
            Q /= 2;
        }

        printf ("%d\n", P);
    }

    return 0;
}