func_code_string: #include <bits/stdc++.h>   using namespace std;   double pi = acos(-1);   long long power(long long a, long long b) {     long long p_res = 1;     while (b > 0) {       if (b % 2 == 1) {         p_res *= a;         b--;       }       a *= a;       b /= 2;     }     return p_res;   }   int cc[300001];   int ans[300001];   set<pair<int, int> > ss;   set<pair<int, int> >::iterator it;   vector<int> adj[300001];   int n, q;   int dfs(int here) {     int res = 1;     for (int i = 0; i < adj[here].size(); i++) {       res += dfs(adj[here][i]);     }     cc[here] = res;     return res;   }   void centroid(int here, int prev) {     int mx = 0;     for (int i = 0; i < adj[here].size(); i++) {       int next = adj[here][i];       mx = max(mx, cc[next]);     }     if (2 * mx <= cc[here])       ans[here] = here;     else       ss.insert(make_pair(cc[here], here));     it = ss.lower_bound(make_pair(2 * mx, -1));     while (it != ss.end()) {       int v = it->first;       int i = it->second;       if (v > 2 * cc[here]) break;       if (2 * mx <= v && 2 * (v - cc[here]) <= v) {         ans[i] = here;         ss.erase(it++);       } else         it++;     }     for (int i = 0; i < adj[here].size(); i++) {       centroid(adj[here][i], here);     }   }   int main() {     scanf( %d %d , &n, &q);     for (int i = 2; i <= n; i++) {       int v;       scanf( %d , &v);       adj[v].push_back(i);     }     dfs(1);     centroid(1, -1);     for (int i = 0; i < q; i++) {       int v;       scanf( %d , &v);       printf( %d n , ans[v]);     }     return 0;   }   