Cod sursa(job #2310381)

Utilizator danielsociuSociu Daniel danielsociu Data 31 decembrie 2018 13:59:42
Problema Stramosi Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.47 kb
#include <fstream>
std::ifstream cin("stramosi.in");
std::ofstream cout("stramosi.out");
#define maxn 250001

int rmq[19][maxn]; //2^18=262112
int n,T;

int main()
{
	int nod,cnt,k,dist;
	cin>>n>>T;
	for(k=1;(1<<k)<=n;++k);
	for(int i=1;i<=n;++i) cin>>rmq[0][i];
	for(int i=1;(1<<i)<=n;++i)
		for(int j=1;j<=n;++j)
			rmq[i][j]=rmq[i-1][rmq[i-1][j]];
	for(;T--;){
		cin>>nod>>cnt;
		dist=k;
		while(nod&&dist--)
			if(cnt&(1<<dist))
				nod=rmq[dist][nod];
		cout<<nod<<'\n';
	}
}