Cod sursa(job #2201842)

Utilizator HumikoPostu Alexandru Humiko Data 6 mai 2018 12:03:56
Problema Stramosi Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.89 kb
#include <bits/stdc++.h>
#define lim 250010

using namespace std;

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

int n, m, dp[lim][30], logaritm[lim], stramosi[lim];

int cautare(int care, int cnt)
{
    for ( int i = logaritm[n]; i >= 0; --i )
    {
        if ( 1<<i <= cnt )
        {
            care = dp[care][i];
            cnt -= (1<<i);
        }
    }
    return care;

}

int main()
{
    ios::sync_with_stdio(false);
    fin.tie(0); fout.tie(0);
    fin>>n>>m;
    for ( int i = 1; i <= n; i++ )
        fin>>dp[i][0];
    for ( int i = 1; i <= n; ++i )
        logaritm[i] = logaritm[i/2]+1;
    for ( int i = 1; i <= logaritm[n]; ++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 q, p;
        fin>>q>>p;
        fout<<cautare(q, p)<<'\n';
    }
}