Cod sursa(job #201469)

Utilizator AndreiDDiaconeasa Andrei AndreiD Data 31 iulie 2008 23:02:57
Problema Stramosi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.75 kb
#include <stdio.h>   

#define FIN "stramosi.in"
#define FOUT "stramosi.out"
#define N_MAX 251000
#define N_MIN 20
long n,m,c;
long b[N_MIN][N_MAX];

long desc(long x)
{
long nr=0;
while (x!=1)
      {
      x/=2;
      ++nr;
      }
return nr;
}


long intrebare(long x, long y)
{
c=0;
while (x)
      {
      if(x%2)
	y=b[c][y];
	x/=2;
	++c;
      }
return y;
}   


int main()
{
long j,i,p,q;

freopen(FIN,"rt",stdin);

scanf("%ld %ld", &n, &m);
for(i=1;i<=n;++i)
    scanf("%ld", &b[0][i]);
int l=desc(n);
for(i=1;i<=l;++i)
   for(j=1;j<=n;++j)
    b[i][j]=b[i-1][b[i-1][j]];
freopen(FOUT,"wt",stdout);
for(i=1;i<=m;i++)
   {
   scanf("%ld %ld", &q, &p);
   printf("%d\n",intrebare(p,q));
}
return 0;
}