Cod sursa(job #138532)

Utilizator ScrazyRobert Szasz Scrazy Data 18 februarie 2008 19:53:45
Problema Stramosi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.65 kb
//a[i][j]=2^j stramosi al lui i O(n*lg(n))
//Probl asemanator cerere(preoni 2005 runda 2) O(n)
#include <stdio.h>
#define NM 250009

long a[NM][19];
long n, m;

int main() 
{
    freopen("stramosi.in","r",stdin);
    freopen("stramosi.out","w",stdout); 
    
    scanf("%ld %ld", &n, &m);
    for(long i=1;i<=n;i++) 
	scanf("%ld", &a[i][0]);
    for(long i=1;i<=n;i++) 
	for(long j=1;j<18;j++) 
	    a[i][j]=a[a[i][j-1]][j-1];
     for(long j=1;j<=m;j++) 
     {
	 long q, p; 
	 scanf("%ld %ld", &q, &p); 
	 long i=18;
	  
	 while (p) 
	 { 
	     while((1<<i)>p) i--; 
	     p-=(1<<i); 
	     q=a[q][i]; 
	 }
	  
	 printf("%ld\n", q);
       } 

     return(0); 
}