Pagini recente » Cod sursa (job #1941160) | Cod sursa (job #2118732) | Cod sursa (job #1814248) | Cod sursa (job #1155778) | Cod sursa (job #871822)
Cod sursa(job #871822)
#include <cstdio>
const int MAX_N(250001);
int dp [20] [MAX_N];
int log [MAX_N];
int n;
inline void build (void)
{
for (int index(2) ; index <= n ; ++index)
log[index] = log[index >> 1] + 1;
int i, j;
for (i = 1 ; i <= log[n] ; ++i)
for (j = 1 ; j <= n ; ++j)
dp[i][j] = dp[i - 1][dp[i - 1][j]];
}
inline int query (int node, int k)
{
while (node && k)
{
node = dp[log[k]][node];
k -= 1 << log[k];
}
return node;
}
int main (void)
{
std::freopen("stramosi.in","r",stdin);
std::freopen("stramosi.out","w",stdout);
int m;
std::scanf("%d %d",&n,&m);
for (int index(1) ; index <= n ; ++index)
std::scanf("%d",&dp[0][index]);
build();
int x, y;
while (m)
{
std::scanf("%d %d",&x,&y);
std::printf("%d\n",query(x,y));
--m;
}
std::fclose(stdin);
std::fclose(stdout);
return 0;
}