Pagini recente » Cod sursa (job #1262417) | Istoria paginii runda/din/clasament | Cod sursa (job #2453737) | Cod sursa (job #1876471) | Cod sursa (job #2706908)
#include <bits/stdc++.h>
using namespace std;
ifstream in ("stramosi.in");
ofstream out ("stramosi.out");
vector <int> v[250001];
int tata[250001];
int pd[25][250001];
int main ()
{
int n, q;
in >> n >> q;
for (int i = 1; i<= n; ++i)
{
int a;
in >> a;
v[a].push_back(i);
tata[i] = a;
}
for (int i = 1;i<=n;++i)
pd[0][i] = tata[i];
for(int j = 1;j<=25;++j)
for (int i = 1; i<=n; ++i)
pd[j][i] = pd[j-1][pd[j-1][i]];
for (int i = 1; i<=q; ++i)
{
int a, b;
in >> a >> b;
int k = 25;
while (k>=0 && b)
{
if (b & (1<<k))
{
b -= (1<<k);
a = pd[k][a];
}
k--;
}
out << a << '\n';
}
return 0;
}