Cod sursa(job #1110956)

Utilizator cbanu96Banu Cristian cbanu96 Data 18 februarie 2014 15:21:49
Problema Stramosi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.83 kb
#include <cstdio>
#include <stack>

#define FILEIN "stramosi.in"
#define FILEOUT "stramosi.out"
#define KMAX 18

using namespace std;

int P[KMAX][1<<KMAX];
int n, m;

void compute() {
    for ( int j = 1; 1<<j <= n; j++ ) {
        for ( int i = 1; i <= n; i++ ) {
            P[j][i] = P[j-1][P[j-1][i]];
        }
    }
}

int query(int q, int p) {

    int result = q;

    for ( int i = 0; 1 << i <= p; i++ ) {
        if ((1<<i) & p) {
            result = P[i][result];
        }
    }

    return result;
}

int main() {
    freopen(FILEIN, "r", stdin);
    freopen(FILEOUT, "w", stdout);

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

    compute();

    for ( int i = 1, p, q; i <= m; i++ ) {
        scanf("%d %d", &q, &p);
        printf("%d\n", query(q, p));
    }

    return 0;
}