Cod sursa(job #190713)

Utilizator hadesgamesTache Alexandru hadesgames Data 23 mai 2008 22:37:16
Problema Stramosi Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.1 kb
#include <vector>
#include <stdio.h>
#include <queue>
#include <string.h>
using namespace std;
#define pb push_back
#define p push
#define fori(c,it) for(vector<int>::iterator it = (c).begin(); it != (c).end(); it++) 
int put[250005],stra[250005],log[35],a[30][25005];
char s[250000*7+3];
int nr;
int main()
{
	FILE *in,*out;
	int i,n,m,j,x,y;
	in=fopen("stramosi.in","r");
	out=fopen("stramosi.out","w");
	fscanf(in,"%d%d\n",&n,&m);
	fgets(s+1,250000 *7+3,in);
	i=1;
	nr=0;
	x=0;
	y=strlen(s+1);
	while (i<=y)
	{
		if (s[i]>='0'&&s[i]<='9')
		{
			x=x*10+s[i]-'0';
		}
		else
			if (s[i-1]>='0'&&s[i-1]<='9')
			{
				nr++;
				stra[nr]=x;
				x=0;
			}
		++i;
	}
	put[1]=0;
	x=2;
	y=1;
	for (i=2;i<=n;++i)
	{
		if (i==x)
		{
			x*=2;
			++y;
		}
		put[i]=y-1;
	
	}
	log[0]=1;
	for (i=1;i<=put[n];++i)
		log[i]=2*log[i-1];
	for (i=1;i<=n;i++)
		a[0][i]=stra[i];
	for (i=1;i<=put[n];i++)
	{
		for (j=1;j<=n;j++)
			a[i][j]=a[i-1][a[i-1][j]];
	}
	for (i=1;i<=m;++i)
	{
		fscanf(in,"%d%d",&y,&x);
		while (x)
		{
			y=a[put[x]][y];
			x-=log[put[x]];
		}
		fprintf(out,"%d\n",y);
	}
	fclose(in);
	fclose(out);
	return 0;
}