Pagini recente » Sandbox (cutiuţa cu năsip) | Cod sursa (job #3296606)
#include <iostream>
#include <fstream>
#include <vector>
#include <cmath>
using namespace std;
int main() {
ifstream cin("stramosi.in");
ofstream cout("stramosi.out");
//Stramosi
int n, m; cin >> n >> m;
int log2n = log2(n) + 1;
vector<vector<int>> stramos(n + 1, vector<int>(log2n));
for(int i = 1; i <= n; i++) {
cin >> stramos[i][0];
}
for(int j = 1; j < log2n; j++) {
for(int i = 1; i <= n; i++) {
stramos[i][j] = stramos[stramos[i][j - 1]][j - 1];
}
}
for(int i = 0; i < m; i++) {
int x, p; cin >> x >> p;
for(int pi = 0; p >= (1 << pi); pi++) {
if((p & 1 << pi) == 0) continue;
x = stramos[x][pi];
}
cout << x << "\n";
}
return 0;
}