Pagini recente » Cod sursa (job #2382146) | Cod sursa (job #521302) | Cod sursa (job #483714) | Cod sursa (job #128079) | Cod sursa (job #129879)
Cod sursa(job #129879)
#include <iostream>
#include <fstream>
using namespace std;
int N(0),
M(0),
prev[250001],
P(0),
Q(0),
A[18][250001];
int main(int argc, char *argv[]) {
ifstream fin("stramosi.in");
fin >> N >> M;
for (int i(1); i <= N; ++i) {
fin >> prev[i];
A[0][i] = prev[i];
}
for (int k(1); k < 19; ++k)
for (int i(1); i <= N; ++i)
A[k][i] = A[k - 1][A[k - 1][i]];
/*for (int i(0); i < 19; ++i) {
for (int j(1); j <= N; ++j)
cout << A[i][j] << " ";
cout << endl;
}*/
ofstream fout("stramosi.out");
while (M--) {
fin >> Q >> P;
//cout << Q << endl;
while (P && Q) {
int p = 1;
int i = 0;
while (p <= P) {
p *= 2;
++i;
}
if (p > P) {
p /= 2;
--i;
}
//cout << p << " " << i << endl;
Q = A[i][Q];
P -= p;
//cout << "--- " << Q << " " << P << endl;
}
fout << Q << endl;
}
fout.close();
fin.close();
return 0;
}