Cod sursa(job #2043)

Utilizator AlxCojocaru Alexandru Alx Data 15 decembrie 2006 18:50:28
Problema Stramosi Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.91 kb
#include <stdio.h>
#include <math.h>
double doi=2;
using namespace std;
int main()
{
 long (*a)[250000],*nrs,n,m,p,q,i,x[18]={1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,32768,65536,131072};
 double j;
 freopen ("stramosi.in","r",stdin);
 freopen ("stramosi.out","w",stdout);
 scanf ("%d %d",&n,&m);
 nrs=new long[250000];
 a=new long[18][250000];
 a[0][0]=0;
 for (i=1;i<=n;i++)
 {
  scanf ("%d",&a[0][i]);
  nrs[i]=1;
  if (i<18)
   a[i][0]=0;
 }
 for (i=1;i<=n;i++)
  for (j=1;j<18;j++)
  {
   int y=j;
   a[y][i]=a[y-1][a[y-1][i]];
  }
 for (i=0;i<m;i++)
 {
  scanf("%d %d",&q,&p);
  int y=16;
  while (!(p&x[y])&&y>=0)
   y--;
  if (y<0)
   printf("0\n");
  while (x[y]!=p)
  {
   p-=x[y];
   q=a[y][q];
   y=16;
   while (!(p&x[y])&&y>=0)
    y--;
   if (y<0)
   {
    printf("0\n");
    break;
   }
  }
  if (y>=0)
   printf("%d\n",a[y][q]);
 }
 return 0;
}