Cod sursa(job #601171)

Utilizator Smaug-Andrei C. Smaug- Data 5 iulie 2011 01:57:57
Problema Stramosi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.59 kb
#include <cstdio>

#define MAXN 250005
#define LGN 20

int main(){

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

  int N, M, i, j, P, Q, p, lg[MAXN];
  static int F[LGN][MAXN];

  scanf("%d%d", &N, &M);
  for(i=1; i<=N; i++)
    scanf("%d", F[0]+i);

  for(i=1; (1<<i)<=N; i++)
    for(j=1; j<=N; j++)
      F[i][j]=F[i-1][F[i-1][j]];

  lg[1]=0;
  for(i=2; i<=N; i++)
    lg[i]=lg[i>>1]+1;

  while(M--){
    scanf("%d%d", &Q, &P);

    i=lg[P]; j=Q; p=0;
    while(p<P){
      j=F[i][j];
      p+=1<<i;
      i=lg[P-p];
    }

    printf("%d\n", j);
  }

  return 0;

}