Cod sursa(job #481628)

Utilizator dcm9000Dinu Cristian Mircea - UPB dcm9000 Data 31 august 2010 23:45:00
Problema Stramosi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.87 kb
#include <iostream>
#include <algorithm>
#include <fstream>
#include <string>

using namespace std;

#define FILE_IN "stramosi.in"
#define FILE_OUT "stramosi.out"

int N, M;

int anc[18][250001];

int main()
{
	FILE* fisIn = fopen(FILE_IN, "r");
	FILE* fisOut = fopen(FILE_OUT, "w+");

	fscanf(fisIn, "%d %d", &N, &M);

	int* ptr = &anc[0][0];
	*(ptr++) = 0;
    for (int i=1; i<=N; i++) fscanf(fisIn, "%d", ptr++);

	int* ptr2;
    for (int j=0; j<17; j++)
    {
		ptr2 = &anc[j+1][0];
		ptr = &anc[j][0];
		
		for (int i=0; i<=N; i++) ptr2[i] = ptr[ptr[i]];
	}

	for (int i=0; i<M; i++)
	{
		int P,Q;

		fscanf(fisIn, "%d %d", &Q, &P);

		if (P > 250000) Q=P=0;

		while (P && Q)
		{
			int bit = 31-__builtin_clz(P);
			
			P -= 1<<bit;
			Q = anc[bit][Q];
		}

		fprintf(fisOut, "%d\n", Q);
	}

	fclose(fisIn);
	fclose(fisOut);
}