Cod sursa(job #1448619)

Utilizator GeiGeiGeorge Cioroiu GeiGei Data 7 iunie 2015 17:42:05
Problema Stramosi Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.99 kb
//0010
#include <cstdio>

int eb[250050][20];

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

    int n, m;
    fscanf(fi, "%d%d", &n, &m);

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

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

    for (int j = 0; j < k; j++) {
        eb[0][j] = 0;
    }

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

    for (int k = 1; k <= m; k++) {
        int p, q;
        fscanf(fi, "%d%d", &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[q][kp];
            }
        }

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

    return 0;
}