Pagini recente » Cod sursa (job #2211442) | Cod sursa (job #2602517) | Cod sursa (job #2822989) | Cod sursa (job #2759316) | Cod sursa (job #640812)
Cod sursa(job #640812)
using namespace std;
#define NMax 250005
#define LgMax 19
#include <cstdio>
#define DIM 8192
#define maxn 300001
int N,M,A[LgMax][NMax],L[NMax];
char ax[DIM+16];
int pz;
inline void cit(int &x)
{
x=0;
while(ax[pz]<'0' || ax[pz]>'9')
if(++pz==DIM)fread(ax, 1, DIM, stdin), pz=0;
while(ax[pz]>='0' && ax[pz]<='9')
{
x=x*10+ax[pz]-'0';
if(++pz==DIM)fread(ax,1, DIM, stdin),pz=0;
}
}
void BuildLog2 ()
{
for (int i=2; i<=250000; ++i)
L[i]=L[i/2]+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 main()
{
int X, Y;
freopen("stramosi.in","r",stdin);
freopen("stramosi.out","w",stdout);
cit(N);cit(M);
for (int i=1; i<=N; ++i)
cit(A[0][i]);
Build();
for (; M>0; --M)
{
cit(X); cit(K);
while (K>0)
{
X=A[L[K]][X];
K-=(1<<L[K]);
}
printf("%d\n",X);
}
return 0;
}