Cod sursa(job #1696681)

Utilizator GabiTulbaGabi Tulba-Lecu GabiTulba Data 29 aprilie 2016 17:09:24
Problema Stramosi Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.7 kb
#include <fstream>

using namespace std;

ifstream in("stramosi.in");
ofstream out ("stramosi.out");

int n,m,k[18][250001]={},num,pw,anc;
void Read()
{
	in>>n>>m;
	for(int i=1;i<=n;i++)
		in>>k[0][i];
	for(int i=1;(1<<i)<=n;i++)
		for(int j=1;j<=n;j++)
			k[i][j]=k[i-1][k[i-1][j]];
}
int bpo2(int nr)
{
	int start=0,end=20;
	int mid=(start+end)/2;
	while(start<end)
	{	if(1<<mid>nr)
			end=mid-1;
		else
			start=mid+1;
		mid=(start+end)/2;
	}
	return mid;
}
void answer()
{
	in>>num>>anc;
	pw=bpo2(anc);
	while(anc!=0)
	{
		num=k[pw][num];
		anc-=1<<pw;
		pw=bpo2(anc);
	}
	out<<num<<'\n';
}
int main()
{
	Read();
	for(int i=1;i<=m;i++)
		answer();
	return 0;
}