Pagini recente » Cod sursa (job #641130) | Cod sursa (job #2124069) | Cod sursa (job #889359) | Cod sursa (job #1258766) | Cod sursa (job #66437)
Cod sursa(job #66437)
#include<stdio.h>
int v[250000], a[250000][12], pt[15];
int poz (int p, int q){
int li=0, ls=10, x;
while (li<=ls){
x=(li+ls)/2;
if (pt[x]<q&&pt[x+1]>=q)
return x;
else
if (pt[x]<q)
li=x+1;
else
ls=x-1;
}
return -1;
}
int main()
{
freopen("stramosi.in","r",stdin);
freopen("stramosi.out","w",stdout);
int i, j, nrt, t, n, p, q, y, s;
scanf("%d%d",&n,&t);
for (i=1;i<=n;i++)
scanf("%d",&v[i]);
for (i=1;i<=n;i++)
a[i][0]=v[i];
pt[0]=1;
for (j=1;j<=10;j++){
for (i=1;i<=n;i++)
a[i][j]=a[a[i][j-1]][j-1];
pt[j]=2*pt[j-1];
}
for (nrt=1;nrt<=t;nrt++){
scanf("%d%d",&p,&q);
s=0;
while (q!=1){
y=poz(p,q);
if (y==-1){
s=1;
printf("0\n");
break;
}
p=a[p][y];
q=q-pt[y];
}
if (!s)
printf("%d\n",v[p]);
}
fclose(stdin);
fclose(stdout);
return 0;
}