Cod sursa(job #189811)

Utilizator znakeuJurba Andrei znakeu Data 18 mai 2008 14:45:36
Problema Stramosi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.84 kb
#include <stdio.h>
#define MAXN 300001

int v[18][MAXN],n,m;



void citire ()
{
	freopen("stramosi.in","r",stdin);
	
	char s[MAXN*8]; int i,j,x;
	
	scanf("%d%d",&n,&m);
	
	fgets(s,64,stdin);
	fgets(s,MAXN*8,stdin);
	
	for (i=1,j=0,x=0; i<=n; ++i,++j,x=0)
	{
		while (s[j]>='0' && s[j]<='9')
			x=x*10+s[j++]-'0';
		v[0][i]=x;		
	}
}

void prep()
{
	int i,j;
	for (i=1; i<18; ++i)
		for (j=0; j<=n; ++j)
			v[i][j]=v[i-1][v[i-1][j]];	
}

inline int answer(int a,int b)
{
	int i=0;
	while (b)
	{
		if (b & 1)
			a=v[i][a];
		b=b>>1;	++i;
	}
	return a;	
}

void rezolv()
{
	freopen("stramosi.out","w",stdout);
	int i,a,b;
	for (i=0; i<m; ++i)
	{
		scanf("%d%d",&a,&b);
		printf("%d\n",answer(a,b));
	}	
	fclose(stdin);
	fclose(stdout);	
}


int main()
{
	citire();
	prep();
	rezolv();	
	return 0;
}