Cod sursa(job #2988161)

Utilizator Cosmin1605Damian Cosmin Cosmin1605 Data 3 martie 2023 18:24:24
Problema Stramosi Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.04 kb
#include <iostream>
#include <fstream>
#define MAX_LOG 20
using namespace std;

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

int tata[250001], stramosi[20][250001], n, m, nod, k;

void calculeazaStramos(){
    int stramos0;
    for(int nod = 1; nod <= n; nod++){
        stramosi[0][nod] = tata[nod];
    }
    for(int p = 1; p < MAX_LOG; p++){
        for(int i = 1; i <= n; i++){
            stramos0 = stramosi[p-1][i];
            stramosi[p][i] = stramosi[p-1][stramos0];
        }
    }
}

int interogareStramos(int nod, int k){
    int p = 1, e = 0;
    while(2 * p <= k){
        p *= 2;
        e++;
    }
    if(p == k){
        return stramosi[e][nod];
    }
    else{
        return interogareStramos(stramosi[e][nod], k-p);
    }
}

int main()
{
    in >> n >> m;
    for(int i = 1; i <= n; i++){
        in >> tata[i];
    }

    calculeazaStramos();

    for(int i = 1; i <= m; i++){
        in >> nod >> k;
        out << interogareStramos(nod,k) << '\n';
    }
    return 0;
}