Pagini recente » Cod sursa (job #778708) | Cod sursa (job #1406913) | Cod sursa (job #578442) | Cod sursa (job #578143) | Cod sursa (job #3230609)
#include <fstream>
#include <vector>
#include <iostream>
std::ifstream cin("stramosi.in");
std::ofstream cout("stramosi.out");
int n, m;
int main() {
cin >> n >> m;
std::vector<std::vector<int>> dp(20, std::vector<int>(n + 1));
/// stramosii directi
for (int i = 1; i <= n; ++i) {
cin >> dp[0][i];
}
/// dp[i][j] este al 2^i lea stramos al lui j
for (int i = 1; i < 20; ++i) {
for (int j = 1; j <= n; j += 1) {
dp[i][j] = dp[i - 1][dp[i - 1][j]];
}
}
for (int i = 1; i <= m; ++i) {
int x, y;
cin >> x >> y;
int exp = 0;
/// se descompune y in baza 2
/// pt fiecare bit de 1
/// se calculeaza al 2^exp stramos
/// se compun relatiile si se afla raspunsul
while (y) {
if (y % 2 == 1) {
x = dp[exp][x];
}
exp += 1;
y /= 2;
}
cout << x << '\n';
}
return 0;
}