Cod sursa(job #998901)

Utilizator Andrei1998Andrei Constantinescu Andrei1998 Data 18 septembrie 2013 18:10:50
Problema Stramosi Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.92 kb
#include <fstream>

using namespace std;

int n,tata[250005];
int din[18][250005];
int log2[250005];

inline void calc_log()
{
    int i=2;
    log2[1]=0;
    for(;i<=n;i++)
        log2[i]=log2[i/2]+1;
}

void precalc()
{
    int i,j,lg=log2[n];
    for(i=1;i<=n;i++)
        din[0][i]=i;
    for(i=1;i<=lg;i++)
        for(j=1;j<=n;j++)
            din[i][j]=din[i-1][tata[din[i-1][j]]];

}

int main()
{
    ifstream cin("stramosi.in");
    ofstream cout("stramosi.out");

    int i,m=0,a,l,rasp,k;
    cin>>n>>m;
    for(i=1;i<=n;i++)
        cin>>tata[i];
    calc_log();
    precalc();
    for(i=0;i<m;i++)
    {
        cin>>a>>l;
        rasp=a;
        k=0;
        while(l)
        {
            if((l&1))
               rasp=tata[din[k][rasp]];
            l>>=1;
            k++;
        }
        cout<<rasp<<'\n';
    }

    cin.close();
    cout.close();
    return 0;
}