Cod sursa(job #1167548)

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

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

inline void Citire()
{
    int i,j;
    freopen("stramosi.in","r",stdin);
    freopen("stramosi.out","w",stdout);
    scanf("%d%d",&n,&m);
    for (i=1;i<=n;i++)
        scanf("%d",&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]<<1;
    for (i=1;i<=n;i++)
        for (j=1;j<=18;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++)
        {
           scanf("%d%d",&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;
                        }
                }
            printf("%d\n",tata);
        }
}

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