Pagini recente » Cod sursa (job #1292303) | Cod sursa (job #759507) | Cod sursa (job #1826757) | Cod sursa (job #1247003) | Cod sursa (job #640732)
Cod sursa(job #640732)
using namespace std;
#include <fstream>
#define NMax 250005
#define LgMax 19
ifstream fin ("stramosi.in");
ofstream fout ("stramosi.out");
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()
{
int X, Y;
fin >> N >> M;
for (int i=1; i<=N; ++i)
fin >> A[0][i];
Build();
for (; M>0; --M)
{
fin >> X >> Y;
fout << Find(X, Y) << "\n";
}
return 0;
}