Cod sursa(job #198436)

Utilizator h_istvanHevele Istvan h_istvan Data 11 iulie 2008 13:56:44
Problema Stramosi Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.68 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,exp;
    
    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]);
     
    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("%d %d\n",&q,&p);
        while (p)
        {
              for (t = 1, exp = 0; (t<<1) <= p; t <<=1, ++exp);  
              q = os[q][exp];  
              p-=t;  
        }
        printf("%d\n",q);
    }
    
    return 0;
}