Pagini recente » Cod sursa (job #2278366) | Cod sursa (job #583440) | Cod sursa (job #1725547) | Cod sursa (job #387053) | Cod sursa (job #2053284)
#include <fstream>
using namespace std;
ifstream in("stramosi.in");
ofstream out("stramosi.out");
const int NMAX = 250005;
int Sol[NMAX][21];
int Log2[NMAX];
int N, M;
void Read(){
for(int i = 1; i <= N; ++i)
in >> Sol[i][0];
}
void Calculate(){
for(int i = 2; i <= N; ++i)
Log2[i] = Log2[i / 2] + 1;
for(int j = 1; (1 << j) <= N; ++j)
for(int i = 1; i <= N; ++i)
Sol[i][j] = Sol[Sol[i][j - 1]][j - 1];
}
int Find(int P, int Q){
while(P){
int R = Log2[P];
Q = Sol[Q][R];
P -= (1 << R);
}
return Q;
}
int main(){
Read();
Calculate();
while(M--){
int P, Q;
in >> Q >> P;
out << Find(P, Q) << "\n";
}
return 0;
}