Pagini recente » Cod sursa (job #1886169) | Cod sursa (job #1946977) | Cod sursa (job #1083619) | Cod sursa (job #233191) | Cod sursa (job #2087677)
#include <fstream>
#include <vector>
using namespace std;
ifstream cin("stramosi.in");
ofstream cout("stramosi.out");
void Init(vector < int > &log_of) {
log_of[1] = 0;
for (int i = 2; i < (int) log_of.size(); i ++) {
log_of[i] = log_of[i / 2] + 1;
}
}
int main() {
int n, m;
cin >> n >> m;
vector < int > log_of(250007);
vector < int > root(n + 1);
Init(log_of);
vector < vector < int > > dp(log_of[n] + 2, vector < int > (n + 1));
for (int i = 1; i <= n; i ++) {
cin >> root[i];
dp[0][i] = root[i];
}
for (int j = 1; j <= log_of[n]; j ++) {
for (int i = 1; i <= n; i ++) {
dp[j][i] = dp[j - 1][dp[j - 1][i]];
}
}
for (int i = 1; i <= m; i ++) {
int q, p;
cin >> q >> p;
while (p) {
q = dp[log_of[p]][q];
p -= (1 << log_of[p]);
}
cout << q << ' ';
}
}