Cod sursa(job #2792899)

Utilizator iancupoppPopp Iancu Alexandru iancupopp Data 2 noiembrie 2021 14:20:35
Problema Stramosi Scor 90
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.61 kb
#include <fstream>

using namespace std;

const int N = 25e4 + 5;
const int LOG = 18;

int tata[N], up[N][LOG];

int main() {
  ifstream cin("stramosi.in");
  ofstream cout("stramosi.out");
  int n, q;
  cin >> n >> q;
  for (int i = 1; i <= n; ++i)
    cin >> tata[i];
  for (int i = 1; i <= n; ++i) {
    up[i][0] = tata[i];
    for (int j = 1; j < LOG; ++j)
      up[i][j] = up[up[i][j - 1]][j - 1];
  }
  while (q--) {
    int nod, k;
    cin >> nod >> k;
    for (int i = LOG - 1; i >= 0; --i)
      if (k & (1 << i))
        nod = up[nod][i];
    cout << nod << "\n";
  }
  cin.close();
  cout.close();
  return 0;
}