Pagini recente » Cod sursa (job #2893780) | Cod sursa (job #244680) | Cod sursa (job #935972) | Cod sursa (job #1811849) | Cod sursa (job #690589)
Cod sursa(job #690589)
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <string>
#include <cstring>
using namespace std;
#define maxN 250000
#define maxS 18
int dp[maxS][maxN];
int solve (int nod, int K)
{
int p;
for (p = 0; (1 << p) <= K; ++ p);
-- p;
if (dp[p][nod] == 0) return 0;
if ((1 << p) == K) return dp[p][nod];
return solve (dp[p][nod], 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[0][i]);
for (int j = 1; (1 << j) <= N; ++ j)
for (int i = 1; i <= N; ++ i) dp[j][i] = dp[j - 1][dp[j - 1][i]];
while (M --)
{
int Q, P;
scanf ("%d %d", &Q, &P);
printf ("%d\n", solve (Q, P));
}
return 0;
}