Cod sursa(job #267728)

Utilizator Adriana_SAdriana Sperlea Adriana_S Data 27 februarie 2009 22:23:28
Problema Stramosi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.7 kb
#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;}