Pagini recente » Cod sursa (job #1511493) | Cod sursa (job #2980962) | Cod sursa (job #972113) | Istoria paginii runda/concurs_000004 | Cod sursa (job #79116)
Cod sursa(job #79116)
#include <stdio.h>
#include <algorithm>
#include <set>
#include <vector>
using namespace std;
const int n_max = 250001;
const int m_max = 300001;
vector <bool> vaz;
vector <int> v[n_max];
vector <int> big_stiva;
vector <int> stiva;
int p[n_max],o[n_max];
int i, n, m, a, b, t;
void merge_stivas()
{
vector <int>::iterator it;
for (it = stiva.begin(); it != stiva.end(); ++ it)
big_stiva.push_back(*it);
}
void df(int x)
{
vector <int>::iterator it;
int t =0;
stiva.push_back(x);
p[x] = big_stiva.size()+stiva.size();
o[x] = stiva.size();
for (it = v[x].begin(); it != v[x].end(); ++ it)
df(*it);
if (v[x].size()==0)
merge_stivas();
stiva.pop_back();
}
int main()
{
freopen("stramosi.in","r",stdin);
freopen("stramosi.out","w",stdout);
scanf("%d %d",&n,&m);
vaz.resize(n+5);
for (i = 1; i <= n; ++ i)
{
scanf("%d",&t);
v[t].push_back(i);
}
df(0);
for (i = 1; i <= m; ++ i)
{
scanf("%d %d", &a, &b);
if (b>o[a])
printf("0\n");
else
printf("%d\n", big_stiva[p[a]-b-1]);
}
}