Cod sursa(job #477361)

Utilizator doru.nituNitu Doru Constantin doru.nitu Data 14 august 2010 12:04:58
Problema Stramosi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb
#include<cstdio>

int n,m,i,j,a[25][250005];

int main()
{
    freopen("stramosi.in","r",stdin);
    freopen("stramosi.out","w",stdout);

    scanf("%d%d",&n,&m);

    for(i=1;i<=n;++i)
        scanf("%d",&a[0][i]);

    int ok=1;

    for(i=1;ok;++i)
    {
        ok=0;
        for(j=1;j<=n;++j)
            if(a[i-1][j])
            {
                a[i][j]=a[i-1][ a[i-1][j] ];
                if(a[i][j]) ok=1;
            }
    }

   for(j=1;j<=m;++j)
    {
        int p,q,step;

        scanf("%d%d",&q,&p);

        for(i=0,step=1;step<n;step<<=1,i++);

        for(;step;step>>=1,--i)
        {
            if(step==p)
            {
                printf("%d\n",a[i][q]);
                break;
            }
            else if(step<p)
            {
                p-=step;
                q=a[i][q];
            }
            if(!q)
            {
                printf("0\n");
                break;

            }

        }

    }

    fclose(stdin);
    fclose(stdout);

    return 0;
}