Pagini recente » Cod sursa (job #2824999) | Cod sursa (job #1579311) | Cod sursa (job #2636756) | Cod sursa (job #2906996) | Cod sursa (job #2909133)
#include <bits/stdc++.h>
using namespace std;
ifstream f("stramosi.in");
ofstream g("stramosi.out");
#define cin f
#define cout g
// #define int long long
const int Max = 3e5 + 1;
void nos()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
}
int n,q;
int father[Max];
vector < int > v[Max];
void read()
{
f>>n>>q;
int i;
for(i=1;i<=n;i++){
int x;
f>>x;
father[i] = x;
v[x].push_back(i);
}
}
vector < pair < int , int > > queries[Max];
int ans[Max];
vector < int > path;
void dfs(int nod){
path.push_back(nod);
for(auto que : queries[nod]){
int len = que.second;
int id = que.first;
int lungime = path.size();
if(lungime - 1 - len >= 0)
ans[id] = path[lungime - 1 - len];
else ans[id] = 0;
}
for(auto ch : v[nod])
dfs(ch);
path.pop_back();
}
void solve()
{
int i;
// ans.resize(q);
for(i=0;i<q;i++){
int p,nod;
f>>nod>>p;
queries[nod].push_back({i,p});
}
for(i=1;i<=n;i++)
if(father[i] == 0)
dfs(i);
for(int i = 0;i<q;i++)
cout<<ans[i]<<'\n';
}
void restart()
{
}
int32_t main()
{
nos();
// int teste;
// f>>teste;
// while(teste--)
{
read();
solve();
restart();
}
return 0;
}