Cod sursa(job #3299270)

Utilizator 2016Teo@Balan 2016 Data 5 iunie 2025 10:44:00
Problema Stramosi Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.95 kb
#pragma GCC optimize("Ofast")
#pragma GCC target("popcnt,avx2")
#pragma GCC optimize("unroll-loops")

#include <iostream>
#include <fstream>

using namespace std;

constexpr int NMAX = 250000;
constexpr int POW2 = 17;

int mat[POW2 + 1][NMAX + 1];

int main() {
  ios::sync_with_stdio(false);
  cin.tie(nullptr);

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

  int n, m;
  in >> n >> m;

  for(int i = 1; i <= n; ++i)
    in >> mat[0][i];

  // Binary lifting: mat[k][i] = stramosul la distanta 2^k al lui i
  for(int k = 1; k <= POW2; ++k)
    for(int i = 1; i <= n; ++i)
      mat[k][i] = mat[k - 1][mat[k - 1][i]];

  for(int q = 0; q < m; ++q) {
    int node, dist;
    in >> node >> dist;

    for(int k = POW2; k >= 0; --k) {
      if(dist >= (1 << k)) {
        node = mat[k][node];
        dist -= (1 << k);
        if(node == 0) break; 
      }
    }

    out << node << '\n';
  }

  return 0;
}