Cod sursa(job #2180194)

Utilizator remus88Neatu Remus Mihai remus88 Data 20 martie 2018 18:13:19
Problema Stramosi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.85 kb
#include <fstream>
#include <cmath>
#define Nmax 250009
#define LOGMAX 20

using namespace std;
ifstream f("stramosi.in");
ofstream g("stramosi.out");

int n,m,p,q,s[LOGMAX][Nmax],kmax;

void build_ancestor () {

    for (int i=1; i<=n; ++i) f>>s[0][i];

    for (int k=1; k<=kmax; ++k)
        for (int i=1; i<=n; ++i) {

            s[k][i] = s[ k-1 ][ s[k-1][i] ];
        }
}

int get_ancestor(int q, int p) {

    for (int k=0; k<=kmax; ++k){

        if (p & 1) {

            q = s[k][q];
        }

        p >>= 1;
    }

    return q;
}

void Solve() {

    f>>n>>m;

    kmax=log2(n);

    build_ancestor();

    for (int i=1; i<=m; ++i) {

        f>>q>>p;
        g<<get_ancestor(q,p)<<'\n';
    }

    //for (int i=0; i)
}

int main() {

    Solve();

    f.close();
    g.close();
    return 0;
}