Pagini recente » Cod sursa (job #1600123) | Cod sursa (job #367877) | Cod sursa (job #430250) | Cod sursa (job #2095934) | Cod sursa (job #1000954)
#include <cstdio>
#include <vector>
using namespace std;
struct rasp {
int ord,p;
};
vector <rasp> r[300001];
vector <int> v[250001];
int n,m;
int stk[250001],stp;
int result[300001];
void dfs(int n) {
rasp nw;
int p,ord;
stk[stp+1] = n;
stp++;
while (!r[n].empty()) {
nw = r[n].back(); r[n].pop_back();
p = nw.p; ord = nw.ord;
if (stp-p>0) result[ord] = stk[stp-p];
else result[ord] = 0;
}
int size = v[n].size();
for (int i=0;i<size;i++) {
dfs(v[n][i]);
}
stp--;
}
int main() {
freopen("stramosi.in","r",stdin);
freopen("stramosi.out","w",stdout);
scanf("%d %d",&n,&m);
for (int i=1;i<=n;i++) {
int a;
scanf("%d",&a);
v[a].push_back(i);
}
for (int i=1;i<=m;i++) {
int p,q;
scanf("%d %d",&q,&p);
rasp nw;
nw.ord=i;
nw.p = p;
r[q].push_back(nw);
}
dfs(0);
for (int i=1;i<=m;i++) {
printf("%d\n",result[i]);
}
return 0;
}