Pagini recente » Cod sursa (job #1777431) | Cod sursa (job #2970791) | Cod sursa (job #1466827) | Cod sursa (job #1504446) | Cod sursa (job #3301707)
#include <fstream>
using namespace std;
ifstream f("stramosi.in");
ofstream g("stramosi.out");
const int nmax = 3e5 + 5;
int n, q, dp[nmax][20], t[nmax];
void precalc()
{
for (int i = 1; i <= n; i++)
dp[i][0] = t[i];
for (int b = 1; (1 << b) <= n; b++)
for (int i = 1; i <= n; i++)
dp[i][b] = dp[dp[i][b - 1]][b - 1];
}
int dist(int nod, int nr)
{
for (int b = 0; (1 << b) <= n; b++)
if ((1 << b) & nr)
nod = dp[nod][b];
return nod;
}
int main()
{
f >> n >> q;
for (int i = 1; i <= n; i++)
f >> t[i];
precalc();
for (; q >= 1; q--)
{
int nod, nr; f >> nod >> nr;
g << dist(nod, nr) << '\n';
}
return 0;
}