Pagini recente » Cod sursa (job #2096721) | Cod sursa (job #572376) | Cod sursa (job #1636928) | Cod sursa (job #1410990) | Cod sursa (job #950893)
Cod sursa(job #950893)
#include <fstream>
using namespace std;
const int MAX = 250005;
const int LG_MAX = 19;
int N, M;
int dp[LG_MAX][MAX];
void preprocess() {
for(int i = 1, step = 2; step <= N; i++, step <<= 1) {
for(int j = 1; j <= N; j++)
dp[i][j] = dp[i - 1][ dp[i - 1][j] ];
}
}
inline int getAncestor(int guy, int ancestor) {
for(int i = 0; (1 << i) <= ancestor; i++) {
if((1 << i) & ancestor)
guy = dp[i][guy];
} return guy;
}
int main() {
ifstream in("stramosi.in"); ofstream out("stramosi.out");
in >> N >> M;
for(int i = 1; i <= N; i++)
in >> dp[0][i];
preprocess();
for(int i = 1, X, Y; i <= M; i++) {
in >> X >> Y;
out << getAncestor(X, Y) << "\n";
} in.close(); out.close();
}