Cod sursa(job #2052634)

Utilizator osiaccrCristian Osiac osiaccr Data 30 octombrie 2017 20:45:13
Problema Stramosi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.83 kb
#include <fstream>
#define DEF 250010
#define DEF2 20

using namespace std;

ifstream fin ("stramosi.in");
ofstream fout ("stramosi.out");

int T[DEF], //vector de tati
D[DEF2][DEF], //D[k][i] al 2 ^ k lea stramosi al i
log[DEF],
n, m;

int main () {
    fin >> n >> m;;
    for (int i = 1; i <= n; i++) {
        fin >> T[i];
        D[0][i] = T[i];
    }

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

    log[1] = 0;
    for (int i = 2; i <= n; i++) {
        log[i] = 1 + log[i / 2];
    }

    for (; m; -- m) {
        int x, y, t;
        fin >> x >> y;
        while (y) {
            x = D[log[y]][x];
            y -= 1 << (log[y]);
        }
        fout << x << "\n";
    }


    return 0;
}