Cod sursa(job #1492183)

Utilizator mucenic_b101Bogdan Mucenic mucenic_b101 Data 27 septembrie 2015 11:27:42
Problema Stramosi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.81 kb
#include <iostream>
#include <fstream>
#define MAXN 250000
#define LG 19
using namespace std;

int dad[MAXN + 1], stram[LG][MAXN + 1];

int main () {
    ifstream cin("stramosi.in");
    ofstream cout("stramosi.out");

    int n, m;
    cin >> n >> m;
    for (int i = 1 ; i <= n ; ++i)
        cin >> stram[0][i];

    int logn = 0, put = 1;
    while (put <= n) {
        put *= 2;
        ++logn;
    }

    --logn;
    for (int j = 1 ; j <= logn ; ++j)
        for (int i = 1 ; i <= n ; ++i)
            stram[j][i] = stram[j - 1][stram[j - 1][i]];

    for (int i = 0 ; i < m ; ++i) {
        int q, p;
        cin >> q >> p;

        for (int j = 0 ; p ; p >>= 1, ++j)
            if (p & 1)
                q = stram[j][q];

        cout << q << "\n";

    }

    return 0;
}