Cod sursa(job #198431)

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

int os[MAXN][MAXL+1];

int main()
{
    int n,m,i,j,p,q,t;
    int log[MAXN];
    
    freopen("stramosi.in","r",stdin);
    freopen("stramosi.out","w",stdout);
    
    scanf("%d %d\n",&n,&m);
    for (i=1; i<=n; ++i) scanf("%d",&os[i][0]);
    
    log[1]=0;
    for (i=2; i<=n; ++i) log[i]=log[i/2]+1;
     
    for (i=1; i<=log[n]; ++i)
        for (j=1;j<=n;++j)
            os[j][i]=os[os[j][i-1]][i-1];
    
    for (i=1; i<=m; ++i)
    {
        scanf("%d %d\n",&q,&p);
        while (p && q)
        {
              q=os[q][log[p]];
              p-=1<<log[p];
        }
        printf("%d\n",q);
    }
    
    return 0;
}