Cod sursa(job #515215)

Utilizator ChallengeMurtaza Alexandru Challenge Data 20 decembrie 2010 18:58:05
Problema Stramosi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.89 kb
#include <fstream>

using namespace std;

const char InFile[]="stramosi.in";
const char OutFile[]="stramosi.out";
const int MaxN=250111;
const int LogMaxN=18;

ifstream fin(InFile);
ofstream fout(OutFile);

/*numele_variabilei_asteai_trebuia_sa_fie_foarte_mic_dar_in_schimb_eu_am_facuto_foarte_mare_pentru_ca_cei_care_se_uita_pe_cod_sa_nu_poata_sa_urmareasca_codul*/

int N,M,P,Q,S[LogMaxN][MaxN],lg[MaxN];

int main()
{
	fin>>N>>M;
	for(register int i=1;i<=N;++i)
	{
		fin>>S[0][i];
	}
	for(register int i=2;i<=N;++i)
	{
		lg[i]=lg[i>>1]+1;
	}
	for(register int j=1;j<LogMaxN;++j)
	{
		for(register int i=1;i<=N;++i)
		{
			S[j][i]=S[j-1][S[j-1][i]];
		}
	}

	for(register int i=0;i<M;++i)
	{
		fin>>Q>>P;
		int l=lg[P];
		int sol=Q;
		while(P)
		{
			sol=S[l][sol];
			P-=(1<<l);
			l=lg[P];
		}
		fout<<sol<<"\n";
	}
	fin.close();
	fout.close();
	return 0;
}