Cod sursa(job #307844)

Utilizator mottyMatei-Dan Epure motty Data 25 aprilie 2009 12:30:47
Problema Stramosi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.11 kb
/*

ID: motty

TASK: stramosi

LANG: C++

SCORE: 100

*/

#include<cstdio>

#include<ctime>

#include<sstream>

#include<fstream>

#include<iostream>

#include<cmath>

#include<stack>

#include<list>

#include<cstdlib>

#include<vector>

#include<deque>

#include<string>

#define N 250001

#define logN 18

#define gol void

#define deschide freopen

using namespace std;

int n,m,r[N],v[logN][N];

gol read()
{
	scanf("%d%d",&n,&m);
	
	//citirea vectorului cu stramosii directi ai fiecarui membru - >

	for( int i=1 ; i<=n ; ++i )
		scanf("%d",&r[i]);
}

gol make_matrix()
{
	//adaugarea stramosilor initiali in matrice - >

	for( int j=1 ; j<=n  ; ++j )
		v[0][j]=r[j];

	//configurarea matricei
	
	for( int i=1 ; 	1<<i <= n ; ++i )
		for( int j=1 ; j<=n ; ++j )
			v[i][j]=v[i-1][v[i-1][j]];
}

gol solve()
{
	int q,p;
	for( int k=1 ; k<=m ; ++k )
	{
		int i=0;

		scanf("%d%d",&q,&p);

		while(p)
		{
			if(p&1)// p -> impar
				q=v[i][q];
			p>>=1;// p/=2
			++i;
		}

		printf("%d\n",q);
	}
}

int main()
{
	deschide("stramosi.in","r",stdin);
	deschide("stramosi.out","w",stdout);

	read();

	make_matrix();

	solve();

	return 0;
}