Pagini recente » Cod sursa (job #129593) | Cod sursa (job #2181915) | Cod sursa (job #393214) | Cod sursa (job #843779) | Cod sursa (job #2792899)
#include <fstream>
using namespace std;
const int N = 25e4 + 5;
const int LOG = 18;
int tata[N], up[N][LOG];
int main() {
ifstream cin("stramosi.in");
ofstream cout("stramosi.out");
int n, q;
cin >> n >> q;
for (int i = 1; i <= n; ++i)
cin >> tata[i];
for (int i = 1; i <= n; ++i) {
up[i][0] = tata[i];
for (int j = 1; j < LOG; ++j)
up[i][j] = up[up[i][j - 1]][j - 1];
}
while (q--) {
int nod, k;
cin >> nod >> k;
for (int i = LOG - 1; i >= 0; --i)
if (k & (1 << i))
nod = up[nod][i];
cout << nod << "\n";
}
cin.close();
cout.close();
return 0;
}