Cod sursa(job #108144)

Utilizator FlorianFlorian Marcu Florian Data 21 noiembrie 2007 17:40:20
Problema Stramosi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.7 kb
#include<stdio.h>
#define Max 250003
FILE*f=fopen("stramosi.in","r");
FILE*g=fopen("stramosi.out","w");
long a[Max],m,n,q,b[20][Max];;
long stramos(long p, long q)
	{
	long k,sol;
	k=0;
	while(1<<k<=p) ++k;
	k--;
	if(p==0) return q;
	else return stramos(p-(1<<k),b[k][q]);
	}
void precalc()
	{
	int i,j,k=2;
	for(i=1;i<=n;++i)
		b[1][i]=a[a[i]],b[0][i]=a[i];
	for(k=2;1<<k<=n;++k)
		{
		for(i=1;i<=n;++i) b[k][i]=b[k-1][b[k-1][i]];

		}
	}
int main()
	{
	long i,p;
	long sol;
	fscanf(f,"%ld %ld",&n,&m);
	for(i=1;i<=n;++i) fscanf(f,"%ld",&a[i]);
	precalc();
	for(i=1;i<=m;++i)
		{
		fscanf(f,"%ld %ld",&q,&p);
		sol=stramos(p,q);
		fprintf(g,"%ld\n",sol);
		}
	return 0;
	}