Pagini recente » Cod sursa (job #2935095) | Cod sursa (job #1578824) | Cod sursa (job #50429) | Cod sursa (job #3138561) | Cod sursa (job #3297279)
// stramosi
#include <iostream>
#include <fstream>
#include <vector>
#include <cmath>
int main() {
std::ifstream f("stramosi.in");
std::ofstream g("stramosi.out");
int n, m;
f >> n >> m;
int log2n = log2(n) + 1;
std::vector<std::vector<int>> s(n + 1, std::vector<int>(log2n + 1, 0));
for (int i = 1; i <= n; ++i)
f >> s[i][0];
for (int i = 1; i <= n; ++i)
for (int j = 1; j <= log2n; ++j)
if(s[i][j - 1])
s[i][j] = s[s[i][j - 1]][j - 1];
while(m--) {
int q, p, r = 0;
f >> q >> p;
while (p) {
if (p % 2)
q = s[q][r]; // actualizarea stramosului curent
++r;
p >>= 1;
} // descompunerea lui p in puteri ale lui 2
g << q << '\n';
}
return 0;
}