Cod sursa(job #141094)

Utilizator SycronVene Tian Sycron Data 22 februarie 2008 19:06:33
Problema Stramosi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.83 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);    
}