Pagini recente » Cod sursa (job #1445668) | Borderou de evaluare (job #3123670) | Cod sursa (job #1331561) | Cod sursa (job #387807) | Cod sursa (job #2691136)
#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, Q;
vector <int > g[NMAX + 5];
vector <pair<int,int> > queries[NMAX + 5];
int ans[MMAX + 5];
int vf, st[NMAX + 5];
void dfs(int node)
{
st[++vf] = node;
for(auto it : queries[node])
{
if(vf - it.first <= 0) ans[it.second] = 0;
else ans[it.second] = st[vf - it.first];
}
for(auto it : g[node])
{
dfs(it);
}
vf--;
}
int main()
{
cin >> N >> Q;
for(int i = 1; i <= N; i++)
{
int dad;
cin >> dad;
g[dad].push_back(i);
}
for(int i = 1; i <= Q; i++)
{
int vertex, anc;
cin >> vertex >> anc;
queries[vertex].push_back({anc, i});
}
dfs(0);
for(int i = 1; i <= Q; i++)
cout << ans[i] << '\n';
return 0;
}