Cod sursa(job #435850)

Utilizator raduiris94Alexa Radu raduiris94 Data 7 aprilie 2010 22:03:11
Problema Stramosi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.92 kb
#include <cstdio> 
#include <cstring> 
int n,m; 
int stram[20][250050]; 
bool desc[20]; 
void intr() 
{   
	int nod,nr,max;    
	scanf("%d%d",&nod,&nr);     
	memset(desc,0,sizeof(desc));  
	for (int i=0;nr;++i)        
		if (1<<i&nr)       
		{            
		desc[i]=1;             
		nr-=1<<i;             
		max=i;        
	}  
	int st=nod;    
	int i=max;   
	do   
	{         
	if (desc[i])            
	st=stram[i][st];     
	}    
	while (i--);     
	printf("%d\n",st); 
} 
void citire() 
{    
	scanf("%d%d",&n,&m);
	for (int i=1;i<=n;++i)
	scanf("%d",&stram[0][i]);
} 
 
void proces() 
{ 
	for (int j=1;1<<j<=n;++j)        
		for (int i=1;i<=n;++i)             
			stram[j][i]=stram[j-1][stram[j-1][i]]; 
} 
 
 
int main() 
{   
	freopen ("stramosi.in","r",stdin);   
	freopen ("stramosi.out","w",stdout);    
	citire();    
	proces();  
	while (m--)       
	intr();   
	return 0; 
}