Pagini recente » Cod sursa (job #18700) | Cod sursa (job #2829281) | Cod sursa (job #2700425) | Cod sursa (job #1583637) | Cod sursa (job #1630679)
#include <fstream>
#include <cstdio>
using namespace std;
ofstream g("stramosi.out");
long n,m,i,j,p,nr,q,dp[250005][30];
long stramos(long q,long p)
{
long P=1,nr=0;
while (true)
{
nr=0;
P=1;
if (q==0)
return 0;
while (P<<1<=p)
{
P<<=1;
nr++;
}
if (P==p)
return dp[q][nr];
q=dp[q][nr];
p=p-P;
}
}
int main()
{
freopen("stramosi.in","r",stdin);
scanf("%ld%ld",&n,&m);
for (i=1;i<=n;i++)
scanf("%ld",&dp[i][0]);
p=1;
while (p<<1<=n)
{
p<<=1;
nr++;
}
p=0;
long ok;
for (j=1;j<=nr;j++)
{
ok=0;
for (i=1;i<=n;i++)
{
dp[i][j]=dp[dp[i][j-1]][j-1];
if (dp[i][j]!=0)
ok=1;
}
if (ok==0)
break;
}
for (i=1;i<=m;i++)
{
scanf("%ld%ld",&q,&p);
g<<stramos(q,p)<<'\n';
}
return 0;
}