Cod sursa(job #1448607)

Utilizator GeiGeiGeorge Cioroiu GeiGei Data 7 iunie 2015 17:27:22
Problema Stramosi Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.07 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);

        while (p > 0) {
            aux = p;
            int kp = 0, put = 1;
            while (aux > 0) {
                kp++;
                aux >>= 1;
                put <<=1;
            }

            p -= put / 2;
            q = eb[q][kp - 1];

            if (q == 0) {
                break;
            }
        }
        fprintf(fo, "%d\n", q);
    }

    return 0;
}