Cod sursa(job #1826625)

Utilizator DevilOnFieldTudor Horia Niculescu DevilOnField Data 10 decembrie 2016 17:51:06
Problema Stramosi Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.83 kb
#include<stdio.h>
#define MAXN 200005
#define LOGBA 19

int boss[MAXN][LOGBA + 1], n, q;
FILE *in, *out;

int main ()
{

    in = fopen("stramosi.in", "r");
    out = fopen("stramosi.out", "w");

    fscanf(in, "%d%d", &n, &q);

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

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

    int nod, niv;
    for(int i = 0; i < q; i++) {
        fscanf(in, "%d%d", &nod, &niv);
        while(niv > 0) {
            int j = 0;
            while((1 << j) <= niv) {
                j++;
            }
            j--;
            nod = boss[nod][j];
            niv = niv - (1 << j);
        }
        fprintf(out, "%d\n", nod);
    }

    fclose(in);
    fclose(out);

    return 0;
}