Cod sursa(job #2363727)

Utilizator YouDontNeedMyNameJurcut Paul YouDontNeedMyName Data 3 martie 2019 15:56:57
Problema Stramosi Scor 90
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.82 kb
#include <bits/stdc++.h>

using namespace std;
ifstream in("stramosi.in");
ofstream out("stramosi.out");
int n,m;
int dp[250005][19];
int lg(int x)
{
    int nr=0;
    while(x)
    {
        nr++;
        x/=2;
    }
    return nr-1;
}
int query(int poz, int nod)
{
    int x=lg(poz);
    int p=(1<<x);
    if(p==poz)
    {
        return dp[nod][x];
    }
    else
        return query(poz-p,dp[nod][x]);
}
int main()
{
    in >> n >> m;
    for(int i=1; i<=n; i++)
    {
        in >> dp[i][0];
    }
    int p=1;
    for(int i=1; i<18; i++)
    {
        for(int j=1; j<=n; j++)
        {
            dp[j][i]=dp[dp[j][i-1]][i-1];
        }
    }
    for(int i=1; i<=m; i++)
    {
        int x,poz;
        in >> x >> poz;
        out << query(poz,x) << '\n';
    }
    return 0;
}