Pagini recente » Cod sursa (job #1147278) | Cod sursa (job #3188975) | Cod sursa (job #2375838) | Cod sursa (job #1792326) | Cod sursa (job #2777774)
#include <fstream>
#include <cmath>
std::ifstream fin ("stramosi.in");
std::ofstream fout ("stramosi.out");
int const nmax = 250000;
int const pmax = 19;
int stramosi[pmax][nmax];
int n, m;
void build_stramosi () {
int plim = log2(n);
for (int p = 1; p <= plim; p++)
for (int i = 1; i <= n; i++)
stramosi[p][i] = stramosi[p - 1][stramosi[p - 1][i]];
}
int main () {
fin >> n >> m;
for (int i = 1; i <= n; i++)
fin >> stramosi[0][i];
build_stramosi();
for (int i = m; i; i--) {
int q, p;
fin >> q >> p; // stramosi [p][q]
int plim = log2(n); int val = (1 << plim);
for (; val; val >>= 1, plim--) {
if (val <= p) {
q = stramosi[plim][q];
p -= val;
}
}
fout << q << "\n";
}
}