Cod sursa(job #476048)

Utilizator igsifvevc avb igsi Data 9 august 2010 16:48:23
Problema Stramosi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.72 kb
#include <stdio.h>

FILE *fin = fopen ("stramosi.in", "r");
FILE *fout = fopen ("stramosi.out", "w");

int stramosi[19][250001];

int main()
{
	int n, m;
	fscanf(fin,"%d %d", &n, &m);

	for (int i = 1; i <= n; i++)
		fscanf( fin, "%d", &stramosi[0][i] );

	for (int i = 1; i < 19; i++)
		for (int j = 1; j <= n; j++)
			stramosi[i][j] = stramosi[i - 1][ stramosi[i - 1][j] ];

	for (; m > 0; m--)
	{
		int q, p, i, nr;
		fscanf (fin, "%d %d", &q, &p);

		while (p > 0)
		{
			i = 0; nr = 1;
			if(p > nr )
			{
				while (nr <= p) { nr = nr<<1; i++; }
				nr = nr>>1; i--;
			}
			p -= nr;
			q = stramosi[i][q];
		}

		fprintf( fout, "%d\n", q); 
	}

	fclose(fin);
	fclose(fout);
	return 0;
}