Cod sursa(job #178279)

Utilizator pandaemonAndrei Popescu pandaemon Data 14 aprilie 2008 12:46:07
Problema Stramosi Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.84 kb
#include<stdio.h>
#include<iostream.h>
#define NMAX 300000

long n,m,i,j,p[20][NMAX];

long x, y, still, contor, raspuns;

long putere_2(long a)
{
 long b = 1;     contor=0;

 while( b < a) { b*=2; contor++; }

 if(b==a) return a;
 else
 {contor--;
 return b/2; }

}



long df(long var)
{
  if(still < y && p[0][var]!=0)  { still++; df( p[0][var] ); }

  else raspuns = var;
}


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

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

  for(j=1; j<=n; j++)  scanf("%ld", &p[0][j]);

  for(i=1; i<=19; i++)
  for(j=1; j<=n;  j++)

    p[i][j] = p[i-1][ p[i-1][j] ];

  for(i=1; i<=m; i++)
  {
    scanf("%ld %ld", &x, &y);

    still = putere_2(y);

    df(p[contor][x]);

    printf("%ld\n" , raspuns);
  }


printf("\n"); return 0; }