Pagini recente » Cod sursa (job #1061519) | Cod sursa (job #880967) | Cod sursa (job #2044257) | Cod sursa (job #215232) | Cod sursa (job #640738)
Cod sursa(job #640738)
using namespace std;
#include <iostream>
#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 X, Y;
cin >> N >> M;
for (int i=1; i<=N; ++i)
cin >> A[0][i];
Build();
for (; M>0; --M)
{
cin >> X >> Y;
cout << Find(X, Y) << "\n";
}
return 0;
}