Cod sursa(job #1687284)

Utilizator lflorin29Florin Laiu lflorin29 Data 12 aprilie 2016 19:24:16
Problema Stramosi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.79 kb
#include <bits/stdc++.h>

using namespace std;

ifstream fin("stramosi.in");
ofstream fout("stramosi.out");

const int MAX_N = 250007, maxPow = log2(MAX_N);

int N, M, dad[maxPow + 1][MAX_N];

void citire()
{
  fin >> N >> M;
  for(int i = 1 ; i <= N ; ++i)
  {
    int x ; fin >> x;
    dad[0][i] = x;
  }
}

void init()
{
  for(int step = 1; (1 << step) <= N; ++step)
     for(int i = 1; i <= N; ++i)
        dad[step][i] = dad[step - 1][dad[step - 1][i]];
}

void rasp(int x , int cat)
{
  int num = x;
  for(int i = 20; i >= 0; --i)
    if(cat & (1 << i)) num = dad[i][num];
  fout << num << '\n';
}

void solve()
{
  while(M--)
  {
    int x , cat;
    fin >> x >> cat;
    rasp(x , cat);
  }
}

int main()
{
  citire();
  init();
  solve();
  return 0;
}