Cod sursa(job #1571847)

Utilizator ipus1Stefan Enescu ipus1 Data 18 ianuarie 2016 16:20:18
Problema Stramosi Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.71 kb
#include<cstdio>
int ma[250001][21];
int afla(int x, int y)
    {int k,i,p,q;
    k=1;
    q=0;
    while(k*2<=y)
        {k*=2;
        q++;
        }
    p=y-k;
    if(p==0)
        return ma[x][q];
    else
        return afla(ma[x][q],p);
    }
int main ()
{freopen ("stramosi.in","r",stdin);
freopen ("stramosi.out","w",stdout);
int n,m,i,j,k,x,q,p;
scanf("%d%d",&n,&k);
q=n;
m=0;
while(q)
    {q/=2;
    m++;
    }
m--;
for(i=1;i<=n;i++)
    scanf("%d",&ma[i][0]);
for(j=1;j<=m;j++)
    for(i=1;i<=n;i++)
        ma[i][j]=ma[ma[i][j-1]][j-1];
for(i=1;i<=k;i++)
    {scanf("%d%d",&x,&p);
    if(p>n)
        printf("0\n");
    else
        printf("%d\n",afla(x,p));
    }
return 0;
}