Pagini recente » Cod sursa (job #153464) | Cod sursa (job #2016309) | Istoria paginii utilizator/ichtv_tinca_mirica_popescu | Cod sursa (job #1031552) | Cod sursa (job #2743432)
//Ilie Dumitru
#include<cstdio>
int N, stramos[19][250005];
void compute()
{
int i, j;
for(j=1;j<19;++j)
for(i=2;i<=N;++i)
stramos[j][i]=stramos[j-1][stramos[j-1][i]];
}
int log2(int x)
{
int l=-1;
do
{
x>>=1;
l++;
}while(x);
return l;
}
int solve(int a, int b)
{
if(!a)
return 0;
if(b)
{
int n=b&(b-1);
return solve(stramos[log2(b-n)][a], n);
}
return a;
}
int main()
{
freopen("stramosi.in", "r", stdin);
freopen("stramosi.out", "w", stdout);
int M, i, a, b;
scanf("%d%d", &N, &M);
for(i=1;i<=N;++i)
scanf("%d", &stramos[0][i]);
compute();
do
{
scanf("%d%d", &a, &b);
printf("%d\n", solve(a, b));
}while(--M);
fclose(stdin);
fclose(stdout);
return 0;
}