Pagini recente » clasament-arhiva-educationala | Cod sursa (job #211115) | Cod sursa (job #3295903) | Cod sursa (job #47272) | Cod sursa (job #2754195)
#include<fstream>
#include <iostream>
#include <vector>
#define ll long long
using namespace std;
ifstream fin("stramosi.in");
ofstream fout("stramosi.out");
int log2[250010], nrNoduri, nrQuery, tree[21][250010];
void logaritm() {
log2[1] = 0;
for (int i = 2; i <= nrNoduri; i++)
log2[i] = log2[i / 2] + 1;
}
void construireTree() {
for (int i = 1; i <= nrNoduri; i++)
fin >> tree[0][i];
//u[i][nod] -> iˆ2-th stramos a lui nod
for (int nod = 1; nod <= nrNoduri; nod++)
for (int i = 1; (1 << i) <= nrNoduri; i++)
tree[i][nod] = tree[i - 1][tree[i - 1][nod]]; //parintele parintelui
}
int query(int nod, int kStramos) {
while (kStramos > 0) {
int linie = log2[kStramos];
nod = tree[linie][nod];
kStramos -= (1 << log2[kStramos]); //drumul catre stramos se ia pe bucati si se scade din total
}
return nod;
}
int main() {
fin >> nrNoduri >> nrQuery;
logaritm();
construireTree();
int nod, kStramos;
for (int i = 1; i <= nrQuery; i++) {
fin >> nod >> kStramos;
fout << query(nod, kStramos) << '\n';
}
return 0;
}