Pagini recente » Cod sursa (job #2881238) | Cod sursa (job #1177080) | Cod sursa (job #390391) | Cod sursa (job #2171754) | Cod sursa (job #1147915)
#include <cstdio>
#include <cmath>
#define Nmax 250666
using namespace std;
int DP[20][Nmax]; /// DP[i][j] -> al 2^i lea stramos al nodului j
int N,Q;
void read()
{
scanf("%d%d", &N, &Q);
for(int j = 1; j <= N; ++j)
scanf("%d", &DP[0][j]); /// al 2^0 lea stramos al nodului j
}
void precompute()
{
int ln = (int)log2(N);
for(int i = 1; i <= ln; ++i)
for(int j = 1; j <= N; ++j)
DP[i][j] = DP[i-1][DP[i-1][j]];
}
void solve()
{
int a,b,put;
for(int i = 1; i <= Q; ++i)
{
scanf("%d%d", &a, &b);
while(b)
{
put = 0;
while( 1<<(put+1) <= b) ++put;
b -= 1<<put;
a = DP[put][a];
}
printf("%d\n",a);
}
}
int main()
{
freopen( "stramosi.in", "r", stdin );
freopen( "stramosi.out", "w", stdout );
read();
precompute();
solve();
return 0;
}