Cod sursa(job #2988156)

Utilizator AndreiMargaritMargarit Andrei AndreiMargarit Data 3 martie 2023 18:20:41
Problema Stramosi Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.97 kb
#include <bits/stdc++.h>

using namespace std;

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

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

void calculeaza_stramosi(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=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,j;
    f>>n>>m;
    for(i=1;i<=n;i++)
    {
        f>>tata[i];
    }
    calculeaza_stramosi(n);
    for(i=1;i<=m;i++)
    {
        f>>nod>>k;
        g<<interogare_stramos(nod,k)<<'\n';
    }
    return 0;
}