Pagini recente » Cod sursa (job #1184695) | Cod sursa (job #2507015) | Cod sursa (job #2680888) | Cod sursa (job #2729226) | Cod sursa (job #2875061)
#include <bits/stdc++.h>
#define NMAX 250005
#define LOGMAX 19
using namespace std;
/*******************************/
// INPUT / OUTPUT
ifstream f("stramosi.in");
ofstream g("stramosi.out");
/*******************************/
/// GLOBAL DECLARATIONS
int N, M;
int dp[LOGMAX][NMAX];
/*******************************/
/// FUNCTIONS
void ReadInput();
void Solution();
/*******************************/
///-------------------------------------
inline void ReadInput()
{
f >> N >> M;
int x;
for (int i = 1 ; i <= N ; ++ i)
{
f >> x;
dp[0][i] = x;
}
}
///-------------------------------------
inline void RMQ()
{
for (int i = 1 ; i < LOGMAX ; ++ i)
{
for (int j = 1 ; j <= N ; ++ j)
{
dp[i][j] = dp[i - 1][dp[i - 1][j]];
}
}
}
///-------------------------------------
int GetAncestor(int node, int p)
{
for (int i = 0 ; i < LOGMAX ; ++ i)
{
if (p & (1 << i))
{
node = dp[i][node];
}
}
return node;
}
///-------------------------------------
inline void Queries()
{
int x, a, p;
while (M --)
{
f >> a >> p;
x = GetAncestor(a, p);
g << x << "\n";
}
}
///-------------------------------------
inline void Solution()
{
RMQ();
Queries();
}
///-------------------------------------
int main()
{
ReadInput();
Solution();
return 0;
}