Pagini recente » Cod sursa (job #3323622) | Cod sursa (job #3325324) | Cod sursa (job #3329418) | Cod sursa (job #3317696) | Cod sursa (job #3324535)
#include <fstream>
#include <vector>
using namespace std;
ifstream cin("stramosi.in");
ofstream cout("stramosi.out");
const int NMAX = 300005;
vector<int> v[NMAX], roots;
vector<pair<int, int>> ops[NMAX];
int ans[NMAX];
vector<int> st;
void dfs(int nod) {
st.push_back(nod);
for (auto op: ops[nod]) {
if (st.size() <= op.first) {
continue;
}
ans[op.second] = st[st.size() - op.first - 1];
}
for (auto i: v[nod]) {
dfs(i);
}
st.pop_back();
}
int main() {
int n, q;
cin >> n >> q;
for (int i = 1; i <= n; i++) {
int a; cin >> a;
if (a == 0) {
roots.push_back(i);
} else {
v[a].push_back(i);
}
}
for (int i = 1; i <= q; i++) {
int nod, k; cin >> nod >> k;
ops[nod].push_back({k, i});
}
for (auto root: roots) {
dfs(root);
}
for (int i = 1; i <= q; i++) {
cout << ans[i] << '\n';
}
return 0;
}