Pagini recente » Cod sursa (job #2727984) | Cod sursa (job #2533096) | Cod sursa (job #1982797) | Cod sursa (job #1156958) | Cod sursa (job #3172171)
#include <fstream>
#include <vector>
using namespace std;
const int nmax = 250005;
const int mmax = 300005;
vector<int> l[nmax];
vector<pair<int, int>> queuries[nmax];
vector<int> current;
int sol[mmax];
void dfs(int node){
current.push_back(node);
for(auto qry: queuries[node]){
int idx = current.size() - 1 - qry.first;
if(idx >= 0){
sol[qry.second] = current[idx];
}
}
for(auto vec: l[node]){
dfs(vec);
}
current.pop_back();
}
int n, m;
int main(){
ifstream f("stramosi.in");
ofstream g("stramosi.out");
f >> n >> m;
for(int i = 1; i <= n; i++){
int tata;
f >> tata;
l[tata].push_back(i);
}
for(int i = 1; i <= m; i++){
int k, x;
f >> x >> k;
queuries[x].push_back({k, i});
}
dfs(0);
for(int i = 1; i <= m; i++){
g << sol[i] << '\n';
}
return 0;
}