Pagini recente » Cod sursa (job #2518458) | Cod sursa (job #2569511) | Cod sursa (job #2518788) | Cod sursa (job #3276811)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("stramosi.in");
ofstream fout("stramosi.out");
const int MAXN = 250000, log_MAXN = 18;
int N, M;
int dad[MAXN][log_MAXN]; // dad[i][j] = al 2^j-lea stramosi al lui i (0 daca nu exista)
int main()
{
fin >> N >> M;
for (int i = 1; i <= N; ++i)
fin >> dad[i][0];
for(int k = 1; k < 18; ++k)
for (int i = 1; i <= N; ++i)
dad[i][k] = dad[dad[i][k - 1]][k - 1];
int P, Q;
while (M--)
{
fin >> Q >> P;
int j = 0;
while ((1 << j) <= P) ++j;
int nod = dad[Q][--j];
while (j--)
if (P & (1 << j)) nod = dad[nod][j];
fout << nod << '\n';
}
}