Pagini recente » Cod sursa (job #910452) | Cod sursa (job #1145168) | Cod sursa (job #2942866) | Cod sursa (job #1105928) | Cod sursa (job #2339699)
#include <cstdio>
using namespace std;
int n,m;
int P[20][25000];
int Pars()
{
int c='0';
int d=0;
while(c<='9' && c>='0')
{
scanf("%c",&c);
d=d*10+(c-'0');
}
d-=(c-'0');
d/=10;
return d;
}
void citire()
{
n=Pars();
m=Pars();
for(int i=1;i<=n;i++)
{
P[0][i]=Pars();
}
}
void DP()
{
for(int i=1;i<20;i++)
{
for(int k=1;k<=n;k++)
P[i][k]=P[i-1][P[i-1][k]];
}
}
int sol(int x,int g)
{
int t=x;
int p=1;
int cnt=0;
while(p<=g)
{
if(g&p)
t=P[cnt][t];
p<<=1;
cnt++;
}
return t;
}
int main()
{
freopen("stramosi.in","r",stdin);
freopen("stramosi.out","w",stdout);
citire();
DP();
for(int i=0;i<m;i++)
{
int a,b;
scanf("%d %d",&a,&b);
printf("%d\n",sol(a,b));
}
return 0;
}