Cod sursa(job #1167541)

Utilizator ArchazeyBaltatu Andrei-Mircea Archazey Data 5 aprilie 2014 14:28:56
Problema Stramosi Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.18 kb
#include<fstream>
using namespace std;

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

int n,m,dp[250005][21],logaritm[250005],puteri[25];

inline void Citire()
{
    int i,j;
    fin>>n>>m;
    for (i=1;i<=n;i++)
        fin>>dp[i][0];
    for (i=2;i<=n;i++)
        logaritm[i]=logaritm[i>>1]+1;
    puteri[0]=1;
    puteri[1]=2;
    for (i=2;i<=20;i++)
        puteri[i]=puteri[i-1]*2;
    for (i=1;i<=n;i++)
        for (j=1;j<=20;j++)
            dp[i][j]=dp[dp[i][j-1]][j-1];
}

inline void DP()
{
    int i,Q,p,aux,tata;
    for (i=1;i<=m;i++)
        {
           fin>>Q>>p;tata=0;
           while (p)
                {
                    aux=logaritm[p];
                    p-=puteri[aux];
                    if (dp[Q][aux]==0)
                        {
                            tata=0;
                            p=0;
                        }
                    else
                        {
                            tata=dp[Q][aux];
                            Q=tata;
                        }
                }
            fout<<tata<<"\n";
        }
}

int main()
{
    Citire();
    DP();
    return 0;
}