Cod sursa(job #1474603)

Utilizator andreea_zahariaAndreea Zaharia andreea_zaharia Data 22 august 2015 13:57:34
Problema Stramosi Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.85 kb
#include <cstdio>
#include <cmath>

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

int d[NMAX][LOGMAX]; //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;
        while (Q) {
            if (Q & 1) {
                P = d[P][x];
            }
            x++;
            Q >>= 1;
        }

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

    return 0;
}