Cod sursa(job #198439)

Utilizator h_istvanHevele Istvan h_istvan Data 11 iulie 2008 14:06:15
Problema Stramosi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.67 kb
#include <stdio.h>
#define MAXN 250005
#define MAXL 18

int os[MAXL+1][MAXN];

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