Cod sursa(job #2988158)

Utilizator gDragon2077Satnoianu Gabriel gDragon2077 Data 3 martie 2023 18:22:32
Problema Stramosi Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.95 kb
#include <bits/stdc++.h>
using namespace std;

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

int tata[250001],stramosi[20][250001];

void cal(int n)
{
    int i,p,stramos0;
    for(i=1; i<=n; i++)
    {
        stramosi[0][i] = tata[i];
    }
    for(p=1; p<20; p++)
    {
        for(i=1; i<=n; i++)
        {
            stramos0 = stramosi[p-1][i];
            stramosi[p][i] = stramosi[p-1][stramos0];
        }
    }
}

int interogare_stramos(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 interogare_stramos(stramosi[e][nod],k-p);
}

int main()
{
    int n,m,i,nod,k;
    fin >> n >> m;
    for(i=1; i<=n; i++)
    {
        fin >> tata[i];
    }
    cal(n);
    for(i=1; i<=m; i++)
    {
        fin >> nod >> k;
        fout << interogare_stramos(nod,k) << '\n';
    }
    return 0;
}