Pagini recente » Cod sursa (job #1628525) | Cod sursa (job #1736073) | Cod sursa (job #2837170) | Cod sursa (job #1892170) | Cod sursa (job #1649472)
#include <iostream>
#include <cstdio>
#include <vector>
#include <bitset>
#include <stack>
#define nmax 250010
using namespace std;
int n,m1,np;
int pater[nmax][20];
int main()
{
int nod,i,j,who,nr;
freopen("stramosi.in","r",stdin);
freopen("stramosi.out","w",stdout);
scanf("%d%d",&n,&m1);
for(i=1;i<=n;i++)
scanf("%d",&pater[i][0]);
for(i=1;(1<<i)<=n;i++)
for(j=1;j<=n;j++)
pater[j][i]=pater [ pater[j][i-1] ] [ i-1 ];
for(;m1;m1--)
{
scanf("%d%d",&who,&nr);
while(who && nr)
{
for(i=1;i<=nr; i<<=1); i>>=1;
if(i==nr) { printf("%d\n",pater[who][i/2]); who=0; nr=0;}
if(i<nr) { who=pater[who][i/2]; nr-=i; }
if(who==0 && nr!=0) { printf("0\n"); break;}
}
}
fclose(stdin);
fclose(stdout);
return 0;
}
/* for(i=1;doila(i)<=n;i++)
{
for(j=1;j<=n;j++)
A[i][j]=A[i-1][A[i-1][j]];
k=i;
}
for(k=1;k<=m;++k)
{
f>>p>>q;
while(p && q)
for(i=k;i>=0;i--)
if(doila(i)<=q && p && q)
{
p=A[i][p];
q-=doila(i);
}
g<<p<<endl;
}
return 0;
}*/