Pagini recente » Cod sursa (job #3271164) | Cod sursa (job #3140831) | Cod sursa (job #85151) | Cod sursa (job #1279687) | Cod sursa (job #2821684)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("stramosi.in");
ofstream fout("stramosi.out");
// "binary lifting"
// dp[i][j] = al (2 ^ j) - lea stramos al nodului i;
// dp[i][j] = dp[ dp[i][j - 1] ][j - 1]; dp[i][0] = val citita;
// pt un numar care nu e putere a lui 2, il descopunem oarecum in baza 2;
const int N = 250010, LOG = 19;
int dp[N][LOG];
int main() {
int n, m;
fin >> n >> m;
for (int i = 1; i <= n; i++) fin >> dp[i][0];
for (int j = 1; (1 << j) <= n; j++)
for (int i = 1; i <= n; i++)
dp[i][j] = dp[dp[i][j - 1]][j - 1];
while (m--) {
int nod, target;
fin >> nod >> target;
int i = 0;
while (target) {
if (target & 1) nod = dp[nod][i];
i++;
target >>= 1;
}
fout << nod << '\n';
}
return 0;
}