Cod sursa(job #757964)

Utilizator XladhenianGrigorita Vlad-Stefan Xladhenian Data 13 iunie 2012 22:40:53
Problema Stramosi Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.87 kb

#include <fstream>
#include <stdlib.h>
#include <string.h>
using namespace std;

long N,M;
long A[260000];

long P[19][260000];

void Compute(void)
{
 long i,j;
 for (i = 1;i <= N;i += 1)
  {
   P[0][i] = A[i];
  }
 for (i = 1;i < 19;i += 1)
  {
   for (j = 1;j <= N;j += 1)
    {
     P[i][j] = P[i - 1][P[i - 1][j]];
    }
  }
}

long Cauta(long Q,long C)
{
 long mm = 18;
 long c = Q;
 while (mm >= 0)
  {
   if ((C & (1 << mm)) == (1 << mm))
     {
      c = P[mm][c];
     }
   mm -= 1;
  }
 return c;
}

int main(void)
{
 fstream fin("stramosi.in",ios::in);
 fstream fout("stramosi.out",ios::out);
 long i,j,a,b;
 fin >> N >> M;
 for (i = 1;i <= N;i += 1)
  {
   fin >> A[i];
  }
 Compute();
 for (i = 0;i < M;i += 1)
  {
   fin >> a >> b;
   fout << Cauta(a,b) << "\n";
  }
 fin.close();
 fout.close();
 return 0;
}