Pagini recente » Cod sursa (job #1772744) | Cod sursa (job #3221553) | Cod sursa (job #1925345) | Cod sursa (job #2152000) | Cod sursa (job #667170)
Cod sursa(job #667170)
//#include <fstream>
//#include <algorithm>
#include<stdio.h>
//using namespace std;
int N,M,mat[20][250001];
int X,Y,t=1,d;
inline int caut(int X,int Y)
{
int p=0;
while(Y!=0){
if((Y&1)==1) X=mat[p][X];
p++; Y>>=1;
}
return X;
}
int main()
{
//ifstream fin("stramosi.in");
//ofstream fout("stramosi.out");
//fin>>N>>M;
//for(int i=1;i<=N;++i)
//{
//fin>>mat[0][i];
//}
freopen("stramosi.in","r",stdin);
freopen("stramosi.out","w",stdout);
scanf("%d%d",&N,&M);
for(int i=1;i<=N;++i)
scanf("%d",&mat[0][i]);
while(t<=N){
t<<=1;d++;
}
for(int i=1;i<=d;++i)
{
for(int j=1;j<=N;++j)
{
mat[i][j]=mat[i-1][mat[i-1][j]];
}
}
for(;M>0;--M)
{
//fin>>X>>Y;
scanf("%d%d",&X,&Y);
int p=0;
while(Y!=0){
if(Y&1) X=mat[p][X];
++p; Y>>=1;
}
//fout<<caut(X,Y)<<'\n';
printf("%d\n",X);
}
//fout.close();
return 0;
}