Pagini recente » Cod sursa (job #539727) | Cod sursa (job #1444940) | Cod sursa (job #2192487) | Cod sursa (job #1951883) | Cod sursa (job #167413)
Cod sursa(job #167413)
#include <stdio.h>
#define N 250002
#define K 20
int n,m,p,q,rez;
int mat[N][K],str[N];
void scan()
{
freopen("stramosi.in","r",stdin);
freopen("stramosi.out","w",stdout);
scanf("%d %d\n",&n,&m);
scanf("%d", &mat[1][0]);
for (int i=2;i<=n;i++)
{
str[i]=str[i/2]+1;
scanf("%d", &mat[i][0]);
}
}
void make()
{
for (int i=1;i<=n;i++)
for (int j=1;j<=str[n];j++)
{
if (!mat[ mat[i][j-1] ][j-1])
break;
mat[i][j]=mat[ mat[i][j-1] ][j-1];
}
}
void solve()
{
for (int i=0;i<m;i++)
{
scanf("%d %d\n",&q,&p);
while (p)
{
rez=mat[q][str[p]];
p-=(1<<str[p]);
q=rez;
}
printf("%d\n", rez);
}
}
int main()
{
scan();
make();
solve();
return 0;
}