Cod sursa(job #211093)

Utilizator taloibogdanTaloi Bogdan Cristian taloibogdan Data 30 septembrie 2008 19:33:22
Problema Stramosi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.59 kb
#include<stdio.h>
long b[20][250001],a[250001],n,i,m,k,p,q;
long stramos(long p,long q)
{long k;
 if(p==1)return a[q];
 for(k=0;;++k)if(1<<(k+1)>p)break;
 if(p-(1<<k)<=0)return b[k][q];
  else return stramos(p-(1<<k),b[k][q]);
}
int main()
{
 freopen("stramosi.in","r",stdin);
 freopen("stramosi.out","w",stdout);
 scanf("%ld%ld",&n,&m);
 for(i=1;i<=n;++i)scanf("%ld",&a[i]);
 for(i=1;i<=n;++i)b[1][i]=a[a[i]];
 k=2;
 while(1<<k<=n)
 {
  for(i=1;i<=n;++i)b[k][i]=b[k-1][b[k-1][i]];
  ++k;
 }
 for(i=1;i<=m;++i)
 {scanf("%ld%ld",&q,&p);
 printf("%ld\n",stramos(p,q));}
 return 0;
}