Pagini recente » Istoria paginii runda/valioiancur | Cod sursa (job #1661512) | Cod sursa (job #1569306) | Istoria paginii utilizator/ucv-geornoiu-iordache-dumitrescu | Cod sursa (job #2753556)
#include <iostream>
const int nMax = 250005;
int t[nMax][20], log2[nMax], n, m, nod, k, curr;
using namespace std;
int main() {
freopen("stramosi.in", "r", stdin);
freopen("stramosi.out", "w", stdout);
// Input rapid
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
cin >> n >> m;
for (int i = 1; i <= n; i++) {
cin >> t[i][0];
}
log2[1] = 0;
for (int i = 2; i <= n; i++) {
log2[i] = log2[i / 2] + 1;
}
for (int i = 1; i <= n; i++) {
for (int p = 1; t[i][p - 1] && p <= 19; p++) {
t[i][p] = t[t[i][p - 1]][p - 1];
}
}
for (int q = 1; q <= m; q++) {
cin >> nod >> k;
curr = nod;
while (curr && k) {
int maxPow2 = log2[k];
curr = t[curr][maxPow2];
k -= (1 << maxPow2);
}
cout << curr << "\n";
}
return 0;
}