Pagini recente » Cod sursa (job #2537138) | Cod sursa (job #1407541) | Cod sursa (job #2682156) | Cod sursa (job #3246253) | Cod sursa (job #3297658)
#include <iostream>
#include <vector>
#include <fstream>
using namespace std;
ifstream fin("stramosi.in");
ofstream fout("stramosi.out");
const int MAXN = 250001;
const int MAX_LOG = 20;
int N, M;
int parent[MAXN];
int stramos[MAX_LOG][MAXN];
void pow2_stramosi() {
for (int nod = 1; nod <= N; ++nod) {
stramos[0][nod] = parent[nod];
}
for (int p = 1; p < MAX_LOG; ++p) {
for (int nod = 1; nod <= N; ++nod) {
int mid = stramos[p - 1][nod];
if (mid != 0) {
stramos[p][nod] = stramos[p - 1][mid];
} else {
stramos[p][nod] = 0;
}
}
}
}
int gaseste_stramos(int x, int k) {
for (int p = 0; p < MAX_LOG; ++p) {
if (k & (1 << p)) {
x = stramos[p][x];
if (x == 0)
break;
}
}
return x;
}
int main() {
fin >> N >> M;
for (int i = 1; i <= N; ++i) {
fin >> parent[i];
}
pow2_stramosi();
for (int i = 0; i < M; ++i) {
int Q, P;
fin >> Q >> P;
fout << gaseste_stramos(Q, P) << '\n';
}
return 0;
}