Pagini recente » Cod sursa (job #199196) | Cod sursa (job #1545873) | Cod sursa (job #828641) | Cod sursa (job #153046) | Cod sursa (job #1899951)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("stramosi.in");
ofstream fout("stramosi.out");
const int maxN = 2.5e5 + 5;
int n, m, q, p, v[maxN], dad[20][maxN];
void build_dynamic()
{
for(int i = 1; i <= n; i++)
dad[0][i] = v[i];
for(int pow = 1; pow <= 18; pow++)
for(int i = 1; i <= n; i++)
dad[pow][i] = dad[pow - 1][dad[pow - 1][i]];
}
int solve(int q, int p)
{
for(int i = 0; (1 << i) <= p; i++)
if(p & (1 << i))
q = dad[i][q];
return q;
}
int main()
{
fin >> n >> m;
for(int i = 1; i <= n; i++)
fin >> v[i];
build_dynamic();
while(m--)
{
fin >> q >> p;
fout << solve(q, p) << '\n';
}
return 0;
}