Cod sursa(job #3296549)

Utilizator PHOSSESSEDProsie Radu-Teodor PHOSSESSED Data 13 mai 2025 15:37:12
Problema Stramosi Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.87 kb
#include <fstream>
#include <vector>
using namespace std;

constexpr int NMAX = 25e4 + 1;
constexpr int MMAX = 3e5;

int stiva[NMAX], e, ans[MMAX], k;
vector<int> vecini[NMAX];
vector<pair<int, int>> qu[NMAX];

void dfs(const int a) {
  for (const auto [k, id] : qu[a])
    if (e >= k) ans[id] = stiva[e - k + 1];

  stiva[++e] = a;
  for (const auto &it : vecini[a])
    dfs(it);
  e--;
}

int main() {
  ifstream cin("stramosi.in");
  ofstream cout("stramosi.out");

  int n, a, b, m;
  cin >> n >> m;
  vector<int> roots;
  for (int i = 1; i <= n; i++) {
    cin >> a;
    if (a)
      vecini[a].emplace_back(i);
    else roots.emplace_back(i);
  }

  for (int i = 0; i < m; i++) {
    cin >> a >> b;
    qu[a].emplace_back(b, i);
  }

  for (const int &root: roots)
    dfs(root);
  for (int i = 0; i < m; i++)
    cout << ans[i] << " ";
}