Pagini recente » Cod sursa (job #1960672) | Cod sursa (job #2251039) | Cod sursa (job #537954) | Cod sursa (job #662708) | Cod sursa (job #2715597)
#include <fstream>
#include <vector>
using namespace std;
ifstream cin("stramosi.in");
ofstream cout("stramosi.out");
const int NMAX = 250000;
const int MMAX = 300000;
int N, M;
vector <int> g[NMAX + 5];
vector <pair<int,int>> queries[NMAX + 5];
int ans[MMAX + 5];
vector <int> stk;
void dfs(int node) {
stk.push_back(node);
for(pair <int, int> qr : queries[node]) {
if((int)stk.size() > qr.first) {
ans[qr.second] = stk.end()[-qr.first - 1];
} else {
ans[qr.second] = 0;
}
}
for(int it : g[node]) {
dfs(it);
}
stk.pop_back();
}
int main() {
cin >> N >> M;
for(int i = 1; i <= N; i++) {
int x;
cin >> x;
g[x].push_back(i);
}
for(int i = 1; i <= M; i++) {
int Q, P;
cin >> Q >> P;
queries[Q].push_back({P, i});
}
dfs(0);
for(int i = 1; i <= M; i++) {
cout << ans[i] << '\n';
}
return 0;
}