Pagini recente » Cod sursa (job #2598839) | Cod sursa (job #2723972) | Cod sursa (job #1042645) | Cod sursa (job #1037466) | Cod sursa (job #1825)
Cod sursa(job #1825)
#include <stdio.h>
#include <math.h>
double doi=2;
using namespace std;
int main()
{
int (*a)[18],*nrs,n,m,p,q,i;
double j;
freopen ("stramosi.in","r",stdin);
freopen ("stramosi.out","w",stdout);
scanf ("%d %d",&n,&m);
nrs=new int[250000];
a=new int[250000][18];
a[0][0]=0;
for (i=1;i<=n;i++)
{
scanf ("%d",&a[i][0]);
nrs[i]=1;
if (i<18)
a[0][1]=0;
}
for (i=1;i<=n;i++)
for (j=1;j<18;j++)
{
int y=j;
a[i][y]=a[a[y-1][i]][y-1];
}
for (i=0;i<m;i++)
{
scanf("%d %d",&q,&p);
j=0;
while (pow(doi,j)<p)
j++;
while (pow(doi,j)!=p)
{
p-=pow(doi,j-1);
int y=j-1;
q=a[q][y];
j=0;
while (pow(doi,j)<p)
j++;
}
int y=j;
printf("%d\n",a[q][y]);
}
return 0;
}