Cod sursa(job #1141948)

Utilizator teo.serbanescuTeo Serbanescu teo.serbanescu Data 13 martie 2014 12:26:08
Problema Stramosi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.75 kb
#include <fstream>

using namespace std;

fstream f("stramosi.in",ios::in);
fstream g("stramosi.out",ios::out);

const long nmax=250005;

long n,m,i,j,x[nmax],a[21][nmax],p,q;

void read()
{
    f>>n>>m;
    for (i=1;i<=n;i++) f>>x[i];
}

void ancestors()
{
    for (j=1;j<=n;j++) a[0][j]=x[j];
    for (i=1;i<=20;i++)
        for (j=1;j<=n;j++)
            a[i][j]=a[i-1][a[i-1][j]];
}

long lookforancestor(int nod,int p)
{
    int k;
    for (k=20;k>=0;k--)
        if (p&(1<<k)) nod=a[k][nod];
    return nod;
}

void solve()
{
    for (i=1;i<=m;i++)
    {
        f>>q>>p;
        g<<lookforancestor(q,p)<<'\n';
    }
}

int main()
{
    read();
    ancestors();
    solve();
    f.close();g.close();
    return 0;
}