Cod sursa(job #141503)

Utilizator BuniakovskiNeguletu Octavian Buniakovski Data 23 februarie 2008 12:31:15
Problema Stramosi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.88 kb
//a[i][j]=2^j stramosi al lui i O(n*lg(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);       
}