Pagini recente » Cod sursa (job #277380) | Cod sursa (job #1941994) | Cod sursa (job #1554363) | Cod sursa (job #475616) | Cod sursa (job #266995)
Cod sursa(job #266995)
#include <cstdio>
#define FIN "stramosi.in"
#define FOUT "stramosi.out"
#define N 250007
#define L 18
int a[L][N],n,m;
void calc()
{
int i,j;
for ( i = 1; i < L; ++i)
for (j = 1; j <= n; ++j)
a[i][j] = a[i - 1][ a[i - 1][j] ];
}
/*
int solve(int q, int p)//stramosul p al lui q
{
if(p == 0)
return q;
if(p & 1)
return solve(a[][])
return a[calc()][q];
}
*/
int solve(int q, int p)//stramosul p al lui q
{
//a[i][j] = al 2 ^ i - lea stramos al lui j
int i = 0;
while(p)
{
if(p & 1)
q = a[i][q];
++i;
p >>= 1;
}
return q;
}
void write()
{
int i,p,q;
for (i = 1; i <= m; ++i)
{
scanf("%d %d", &q, &p);
printf("%d\n", solve(q,p));
}
}
int main()
{
int i;
freopen(FIN, "r", stdin);
freopen(FOUT, "w", stdout);
scanf("%d %d", &n, &m);
for (i = 1; i <= n; ++i)
scanf("%d", &a[0][i]);
calc();
write();
return 0;
}