Cod sursa(job #1488962)

Utilizator andreea_zahariaAndreea Zaharia andreea_zaharia Data 20 septembrie 2015 12:09:05
Problema Stramosi Scor 100
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[LOGMAX][NMAX]; //d[i][j] = al 2^i -lea stramos al lui j

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[0][i]);
    }

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

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

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

        int x = 0;
        while (Q) {
            if (Q & 1) {
                P = d[x][P];
            }
            x++;
            Q >>= 1;
        }

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

    return 0;
}