Pagini recente » Cod sursa (job #551694) | Cod sursa (job #167767) | Cod sursa (job #812502) | Cod sursa (job #2246450) | Cod sursa (job #4657)
Cod sursa(job #4657)
#include <stdio.h>
void df(unsigned);
unsigned N,M,i,S[22][250005],STR[250005],q,p,pt,j;
int main(void)
{
freopen("stramosi.in", "r", stdin);
freopen("stramosi.out", "w", stdout);
scanf("%u %u", &N, &M);
for (i=1;i<=N;i++)
scanf("%u", &S[0][i]);
for (i=1;i<=N;i++)
if (STR[i]==0)
{
STR[i]=1;
df(i);
}
for (i=1;i<=M;i++)
{
scanf("%u %u", &p, &q);
while (q && p)
{
for (j=0,pt=1;pt<q/2;pt<<=1,j++);
p=S[j][p]; q-=pt;
}
printf("%u\n", p);
}
return 0;
}
void df(unsigned maimuta)
{
int i;
if (S[0][maimuta]==0)
return;
if (!STR[S[0][maimuta]])
{
STR[S[0][maimuta]]=1;
df(S[0][maimuta]);
}
for (i=1;S[i-1][S[i-1][maimuta]];i++)
S[i][maimuta]=S[i-1][S[i-1][maimuta]];
}