Pagini recente » Cod sursa (job #432130) | Cod sursa (job #3286653) | Cod sursa (job #1474624) | Cod sursa (job #2063776) | Cod sursa (job #1714657)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("stramosi.in");
ofstream fout("stramosi.out");
const int nmax = 250005;
int n,m,Log[nmax],P2[nmax];
int dp[nmax][20],tata[nmax];
inline void Precalc()
{
int i;
P2[0] = 1;
for(i = 1; i <= 18; i++) P2[i] = 2*P2[i-1];
Log[1] = 0;
for(i = 2; i <= nmax - 5; i++) Log[i] = Log[i/2] + 1;
}
inline void Solve()
{
int i,j,x,y,p,nod;
fin>>n>>m;
for(i = 1; i <= n; i++) fin>>tata[i];
for(i = 1; i <= n; i++) dp[i][0] = tata[i];
for(i = 1; i <= n; i++)
for(j = 1; j <= 18; j++)
dp[i][j] = dp[dp[i][j-1]][j-1];
for(i = 1; i <= m; i++)
{
fin >> x >> y;
nod = x;
while(y > 0)
{
p = Log[y];
nod = dp[nod][p];
y -= P2[p];
}
fout << nod << "\n";
}
fout.close();
}
int main()
{
Precalc();
Solve();
return 0;
}