Pagini recente » Cod sursa (job #2633981) | Cod sursa (job #1487976) | Cod sursa (job #1522178) | Cod sursa (job #1365560) | Cod sursa (job #690583)
Cod sursa(job #690583)
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <string>
#include <cstring>
using namespace std;
#define maxN 250000
#define maxS 18
int dp[maxN][maxS];
int solve (int nod, int K)
{
int p;
for (p = 0; (1 << p) <= K; ++ p);
-- p;
if (dp[nod][p] == 0) return 0;
if ((1 << p) == K) return dp[nod][p];
return solve (dp[nod][p], K - (1 << p));
}
int main()
{
freopen ("stramosi.in", "r", stdin);
freopen ("stramosi.out", "w", stdout);
int N, M;
scanf ("%d %d", &N, &M);
for (int i = 1; i <= N; ++ i) scanf ("%d", &dp[i][0]);
for (int j = 1; (1 << j) <= N; ++ j)
for (int i = 1; i <= N; ++ i) dp[i][j] = dp[dp[i][j - 1]][j - 1];
while (M --)
{
int Q, P;
scanf ("%d %d", &Q, &P);
printf ("%d\n", solve (Q, P));
}
return 0;
}