Pagini recente » Cod sursa (job #1058532) | Cod sursa (job #2188342) | Cod sursa (job #3252634) | Cod sursa (job #613448) | Cod sursa (job #1743259)
#include <bits/stdc++.h>
using namespace std;
const int NMAX = 250005,
LGN = 20;
int anc[NMAX],
dp[NMAX][LGN];
inline int anc_q(int q, int p) {
int e = 0;
while(q!=0 && p>0) {
if(p&1)
q = dp[q][e];
p>>=1;
++e;
}
return q;
}
int main(void) {
freopen("stramosi.in", "r", stdin);
freopen("stramosi.out", "w", stdout);
int n, m, q, p;
scanf("%d%d",&n,&m);
for(int i=1; i<=n; ++i)
scanf("%d",&anc[i]);
for(int i=1; i<=n; ++i)
dp[i][0] = anc[i];
for(int e=1; e<LGN; ++e)
for(int i=1; i<=n; ++i)
dp[i][e] = dp[anc[i]][e-1];
for(int i=1; i<=m; ++i) {
scanf("%d%d",&q,&p);
(p>n) ? (printf("0\n")) : (printf("%d\n",anc_q(q, p)));
}
fclose(stdin);
fclose(stdout);
return 0;
}