Cod sursa(job #1474602)

Utilizator andreea_zahariaAndreea Zaharia andreea_zaharia Data 22 august 2015 13:56:11
Problema Stramosi Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.85 kb
#include <iostream>
#include <cmath>

using namespace std;

#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);

    cin >> N >> M;
    for (int i = 1; i <= N; i++) {
        cin >> 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--) {
        cin >> P >> Q;

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

        cout << P << '\n';
    }

    return 0;
}