Pagini recente » Cod sursa (job #2083534) | Cod sursa (job #2372777) | Cod sursa (job #46667) | Cod sursa (job #1550257) | Cod sursa (job #3195820)
#include <vector>
#include <iomanip>
#include <fstream>
using namespace std;
ifstream cin ("stramosi.in");
ofstream cout ("stramosi.out");
using VI = vector<int>;
const int Dim = 250001;
int n, m;
VI G[Dim];
VI E, Skip;
int skipCnt;
int Pos[Dim];
void DF(int x, int boss) {
if(!Pos[x]) Pos[x] = E.size();
E.push_back(x);
Skip.push_back(skipCnt);
for(int y : G[x]) {
if(y == boss) continue;
DF(y, x);
++skipCnt;
}
}
int Kth(int p, int k) {
if(!k) return E[p];
if(p-k < 0) return 0;
return Kth(p-k, Skip[p]-Skip[p-k]);
}
int main(){
cin >> n >> m;
int x, k;
for(int i = 1; i <= n; ++i) {
cin >> x;
G[x].push_back(i);
}
DF(0, 0);
/*for(int q : E) cout << setw(2) << q << ' ';
cout << '\n';
for(int q : Skip) cout << setw(2) << q << ' ';*/
for(int i = 0; i < m; ++i) {
cin >> x >> k;
cout << Kth(Pos[x], k) << '\n';
}
return 0;
}