Pagini recente » Cod sursa (job #2542720) | Cod sursa (job #2467972) | Cod sursa (job #1016334) | Cod sursa (job #1009520) | Cod sursa (job #267728)
Cod sursa(job #267728)
#include <stdio.h>
#include <math.h>
long n,m,k,a[20][250000];
void cit()
{scanf("%d %d",&n,&m);
long i;
for (i=1;i<=n;i++) scanf("%ld ",&a[0][i]);}
int logme(long x)
{for (int B=3;B>=0;B--)
for (int b=7;b>=0;b--)
if (x&(1<<(B*8+b))) return (B*8+b+1);}
void mat()
{int w=logme(n);
for (long k=1;k<=w;k++)
for (long i=1;i<=n;i++) a[k][i]=a[k-1][a[k-1][i]];}
void det()
{long p,q,nr;
for (long i=1;i<=m;i++)
{
scanf("%ld %ld",&q,&p);
for (int B=3;B>=0;B--)
for (int b=7;b>=0;b--)
if (p&(1<<(B*8+b))) q=a[B*8+b][q];
printf("%ld\n",q);
}}
int main()
{freopen("stramosi.in","r",stdin);
freopen("stramosi.out","w",stdout);
cit();
mat();
det();
return 0;}