Cod sursa(job #1505941)

Utilizator ArkinyStoica Alex Arkiny Data 19 octombrie 2015 21:27:13
Problema Stramosi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.01 kb
#include<stdio.h>
#include<queue>

FILE *in, *out;

int N,M;

#define MAX 250001


int D[18][MAX],pos=0;
char buf[10000];


int readNumber(FILE *&f)
{
	int nr = 0;
	while (buf[pos] < '0' || buf[pos]>'9')
	{
		++pos;
		if (pos == 10000)
		{
			pos = 0;
			fread(buf, 1, 10000, in);
		}
	}

	while (buf[pos] >= '0' && buf[pos]<='9')
	{
		nr = nr * 10 + (buf[pos] - '0');
		++pos;
		if (pos == 10000)
		{
			pos = 0;
			fread(buf, 1, 10000, in);
		}
	}
	
	return nr;
}

int main()
{
	in = fopen("stramosi.in", "r");
	out = fopen("stramosi.out", "w");

	fread(buf, 1, 10000, in);
	N=readNumber(in);
	M=readNumber(in);

	for (int i = 1;i <= N;++i)
		D[0][i] = readNumber(in);

	int i, j;
	for (i = 1;(1 << i) <= N;++i)
		for (j = 1;j <= N;++j)
			D[i][j] = D[i - 1][D[i - 1][j]];

	int P, Q;
	for (i = 1;i <= M;++i)
	{
		Q=readNumber(in);
		P=readNumber(in);
		for (j = 0;P;P >>= 1, ++j)
			if (P & 1)
				Q = D[j][Q];
		fprintf(out, "%d\n", Q);
	}

	
	return 0;
}