Cod sursa(job #1114451)

Utilizator dariusdariusMarian Darius dariusdarius Data 21 februarie 2014 17:06:47
Problema Stramosi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.91 kb
#include <algorithm>
#include <iostream>
#include <fstream>
using namespace std;
const int MAX_N = 250005;

int ancestor[20][MAX_N];
inline int solve(int p, int node) {
    //cout << "Getting for " << node << ":\n";
    for(int pace = 19; pace >= 0; -- pace) {
        if(p >= (1 << pace)) {
            p -= (1 << pace);
            node = ancestor[pace][node];
            //cout << pace << " " << node << "\n";
        }
    }
    return node;
}

int main() {
    ifstream fin("stramosi.in");
    ofstream fout("stramosi.out");
    int n, m;
    fin >> n >> m;
    for(int i = 1; i <= n; ++ i) {
        fin >> ancestor[0][i];
    }
    for(int i = 1; (1 << i) <= n; ++ i) {
        for(int j = 1; j <= n; ++ j) {
            ancestor[i][j] = ancestor[i - 1][ancestor[i - 1][j]];
        }
    }
    for(int i = 1; i <= m; ++ i) {
        int p, q;
        fin >> p >> q;
        fout << solve(q, p) << "\n";
    }
    return 0;
}