Pagini recente » Cod sursa (job #2043190) | Cod sursa (job #60157) | Cod sursa (job #2277737) | Cod sursa (job #2314231) | Cod sursa (job #729567)
Cod sursa(job #729567)
#include<cstdio>
int N, M;
int log(int x)
{
int counter = -1;
int i = 1;
while(i <= x)
{
i = i<<1;
counter++;
}
return counter;
}
int P, Q;
int stramos[250001];
int st[250000][20];
int str(int Q, int P)
{
if(P == 0)
{
return Q;
}
int pass = log(P);
int current = st[Q][pass];
return str(current, P - pass - 1);
}
int main()
{
freopen("stramosi.in","r", stdin);
freopen("stramosi.out","w", stdout);
scanf("%d %d\n", &N, &M);
for(int i = 1; i <= N; i++)
{
scanf("%d ", &stramos[i]);
st[i][0] = stramos[i];
}
//construim st
for(int j = 1; j < 19; j++)
{
for(int i = 1; i <= N; i++)
{
st[i][j] = st[st[i][j-1]][j-1];
}
}
/*for(int j = 0; j < 19; j++)
{
for(int i = 1; i <= N; i++)
{
printf("%d ", st[i][j]);
}
printf("\n");
}*/
int current;
int pass;
for(int i = 1; i <= M; i++)
{
scanf("%d %d\n", &Q, &P);
printf("%d\n", str(Q, P));
}
return 0;
}