Pagini recente » Cod sursa (job #1100751) | Cod sursa (job #728675) | Cod sursa (job #2217832) | Cod sursa (job #2157551) | Cod sursa (job #2499211)
#include <bits/stdc++.h>
#define nmax 250005
#define mmax 300005
using namespace std;
ifstream fin("stramosi.in");
ofstream fout("stramosi.out");
int n, Q;
int tt[nmax];
int p, q;
int dp[nmax][20]; //dp k, i ==> Stramosul 2^k al nodului i
inline void read()
{
fin >> n >> Q;
for (int i = 1; i <= n; i++)
fin >> dp[i][0];
}
inline void build()
{
int ok = 1;
for (int k = 1; k <= 18; k++)
{
ok = 0;
for (int i = 1; i <= n; i++)
{
dp[i][k] = dp[dp[i][k - 1]][k - 1];
if (dp[i][k])
ok = 1;
}
}
}
inline void solve()
{
int k = 0;
while (q != 0)
{
// cout << p << " ";
if (q % 2 == 1)
p = dp[p][k];
k++;
q /= 2;
}
fout << p << "\n";
}
int main()
{
read();
build();
while (Q--)
{
fin >> p >> q;
solve();
}
return 0;
}