Cod sursa(job #1699238)

Utilizator Dddarius95Darius-Florentin Neatu Dddarius95 Data 6 mai 2016 19:21:14
Problema Stramosi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.88 kb
#include <cstdio>
#include <cmath>
#define LOGMAX 20
#define NMAX 250009

using namespace std;


int N, M, lg;
int *s[LOGMAX];


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

    scanf("%d%d", &N, &M);

    lg = log2(N);

    for (int i = 0; i <= lg; ++i) {
        s[ i ] = new int[ N + 1 ];
    }

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

    for (int k = 1; k <= lg; ++k) {
        for (int i = 1; i <= N; ++i) {
            s[ k ][ i ] = s[ k - 1 ][ s[ k - 1 ][ i ] ];
        }
    }

    while (M--) {
        int x, p;
        scanf("%d%d", &x, &p);

        for (int k = 0;  k <= lg && x; ++k, p >>= 1) {
            if (p & 1) {
                x = s[ k ][ x ];
            }
        }

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

    for (int k = 0; k <= lg; ++k) {
        delete[] s[ k ];
    }

    return 0;
}