Cod sursa(job #198425)

Utilizator h_istvanHevele Istvan h_istvan Data 11 iulie 2008 13:28:48
Problema Stramosi Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.9 kb
#include <stdio.h>
#define MAXN 250001
#define MAXL 18
using namespace std;

long n,m,i;
long os[MAXN][MAXL+1];
long log[MAXN];

void read()
{
     scanf("%ld %ld\n",&n,&m);
     long i;
     for (i=1; i<=n; ++i) scanf("%ld",&os[i][0]);
     scanf("\n");
}

void init()
{
     long i,j;
     
     log[1]=0;
     for (i=2; i<=n; ++i) log[i]=log[i/2]+1;
     
     for (i=1; i<=MAXL; ++i)
         for (j=1;j<=n;++j)
             os[j][i]=os[os[j][i-1]][i-1];
}

void solve()
{
     long i,p,q,t;
     for (i=1; i<=m; ++i)
     {
         scanf("%ld %ld\n",&q,&p);
         while (p && q)
         {
               q=os[q][log[p]];
               p-=1<<log[p];
         }
         printf("%ld\n",q);
     }
}

int main()
{
    freopen("stramosi.in","r",stdin);
    freopen("stramosi.out","w",stdout);
    
    read();
    init();
    solve();   
    
    return 0;
}