Pagini recente » Cod sursa (job #2088137) | Cod sursa (job #2623072) | Cod sursa (job #1067973) | Cod sursa (job #2073421) | Cod sursa (job #1166539)
#include <stdio.h>
#define NMAX 250005
#define LOGN 20
using namespace std;
int A[LOGN+5][NMAX];
int N,M,T[NMAX];
int P,Q;
void read()
{
scanf("%d %d\n",&N,&M);
for (int i=1;i<=N;i++)
scanf("%d ",&T[i]);
}
void preproc()
{
for (int i=1;i<=N;i++)
A[0][i]=T[i];
for (int i=1;i<=LOGN;i++)
for (int j=1;j<=N;j++)
A[i][j]=A[i-1][A[i-1][j]];
}
int query(int gr,int poz)
{
for (int i=20;i>=0;i--)
if ((1<<i) & P)
poz=A[i][poz];
return poz;
}
void solve()
{
for (int i=1;i<=M;i++)
{
scanf("%d %d\n",&Q,&P);
printf("%d\n",query(P,Q));
}
}
int main()
{
freopen ("stramosi.in","r",stdin);
freopen ("stramosi.out","w",stdout);
read();
preproc();
solve();
fclose(stdin);
fclose(stdout);
return 0;
}