Pagini recente » Cod sursa (job #30667) | Cod sursa (job #838347) | Cod sursa (job #2243042) | Cod sursa (job #714901) | Cod sursa (job #1167548)
#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;
}