Cod sursa(job #198415)

Utilizator h_istvanHevele Istvan h_istvan Data 11 iulie 2008 13:11:06
Problema Stramosi Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.91 kb
#include <stdio.h>
#define MAXN 250001
#define MAXL 18
#define FOR(i,a,b) for(i=a;i<=b;++i)
using namespace std;

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

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;
     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)
         {
               t=0;
               while ((1 << (t+1)) <= p) ++t;    
               q=os[q][t];
               p-=1 << t;
         }
         printf("%ld\n",q);
     }
}

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