Pagini recente » Cod sursa (job #1838336) | Cod sursa (job #550057) | Cod sursa (job #1240119) | Cod sursa (job #2430050) | Cod sursa (job #640742)
Cod sursa(job #640742)
using namespace std;
#include <stdio.h>
#define NMax 250005
#define LgMax 19
int N,M,A[LgMax][NMax],L[NMax];
void BuildLog2 ()
{
for (int i=2; i<=250000; ++i)
L[i]=L[i>>1]+1;
}
void Build()
{
BuildLog2 ();
for (int i=1; i<=L[N]; ++i)
for (int j=1; j<=N; ++j)
A[i][j]=A[i-1][A[i-1][j]];
}
int Find(int X, int K)
{
while (K*X>0)
{
X=A[L[K]][X];
K-=(1<<L[K]);
}
return X;
}
int main()
{
freopen ("stramosi.in","r",stdin);
freopen ("stramosi.out","w",stdout);
int Q, P;
scanf("%d%d",&N,&M);
for (int i=1; i<=N; ++i)
scanf("%d",&A[0][i]);
Build();
for (; M>0; --M)
{
scanf("%d%d",&Q,&P);
printf("%d\n",Find(Q, P));
}
return 0;
}