Cod sursa(job #1448673)

Utilizator GeiGeiGeorge Cioroiu GeiGei Data 7 iunie 2015 19:13:58
Problema Stramosi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.03 kb
//0010
#include <cstdio>

long eb[20][250050];

int main() {
    FILE* fi = fopen("stramosi.in", "rt");
    FILE* fo = fopen("stramosi.out", "wt");

    long n = 0, m = 0;
    fscanf(fi, "%ld%ld", &n, &m);

    for (long i = 1; i <= n; i++) {
        fscanf(fi, "%ld", &eb[0][i]);
    }

    long aux = n, k = 0;
    while (aux > 0) {
        k++;
        aux >>= 1;
    }

    for (long i = 0; i < k; i++) {
        eb[i][0] = 0;
    }

    for (long i = 1; i < k; i++) {
        for (long j = 1; j <= n; j++) {
            eb[i][j] = eb[i - 1][eb[i - 1][j]];
        }
    }

    for (long w = 1; w <= m; w++) {
        long p = 0, q = 0;
        fscanf(fi, "%ld%ld", &q, &p);

        int v[20], kp = 0;

        while (p > 0) {
            v[kp] = p % 2;
            p >>= 1;
            kp++;
        }

        while (kp > 0) {
            kp--;
            if (v[kp] == 1) {
                q = eb[kp][q];
            }
        }

        fprintf(fo, "%ld\n", q);
    }

    return 0;
}