Cod sursa(job #611971)

Utilizator PetcuIoanPetcu Ioan Vlad PetcuIoan Data 5 septembrie 2011 11:08:05
Problema Stramosi Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.87 kb
#include<stdio.h>
int pt2[20]={1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,32768,65536,131072,262144,524288},a[20][251000];
inline int close(int y)
{
    int st=1,dr=19,mid,last=0;
    while(st<=dr)
    {
        mid=st+((dr-st)>>1);
        if(pt2[mid]<=y)
        {
            last=mid;
            st=mid+1;
        }
        else
            dr=mid-1;
    }
    return last;
}
int main()
{
    freopen("stramosi.in","r",stdin);
    freopen("stramosi.out","w",stdout);
    int n,m,i,j,k,x,y,t;
    scanf("%d%d",&n,&m);
    for(i=1;i<=n;i++)
        scanf("%d",&a[0][i]);
    for(i=2,k=1;i<=2;k++,i*=2)
        for(j=1;j<=n;j++)
            a[k][j]=a[k-1][a[k-1][j]];
    for(i=1;i<=m;i++)
    {
        scanf("%d%d",&x,&y);
        while(y)
        {
            t=close(y);
            x=a[t][x];
            y-=pt2[t];
        }
        printf("%d\n",x);
    }
    return 0;
}