Cod sursa(job #198428)

Utilizator h_istvanHevele Istvan h_istvan Data 11 iulie 2008 13:38:42
Problema Stramosi Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.72 kb
#include <stdio.h>
#define MAXN 250001
#define MAXL 18

int n,m,i,j,p,q,t;
int os[MAXN][MAXL+1];
int log[MAXN];

int main()
{
    freopen("stramosi.in","r",stdin);
    freopen("stramosi.out","w",stdout);
    
    scanf("%ld %ld\n",&n,&m);
    for (i=1; i<=n; ++i) scanf("%ld",&os[i][0]);
    scanf("\n");
    
    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];
    
    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);
    }
    
    return 0;
}