Pagini recente » Cod sursa (job #1998695) | Cod sursa (job #2218599) | Cod sursa (job #448282) | Cod sursa (job #43725) | Cod sursa (job #3277121)
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 250005;
const int LOG = 20; // log2(MAXN)
int up[MAXN][LOG]; // up[i][j] = al 2^j-lea stramos al lui i
int main() {
ifstream fin("stramosi.in");
ofstream fout("stramosi.out");
int N, M;
fin >> N >> M;
// Citim stramosii directi
for (int i = 1; i <= N; i++) {
fin >> up[i][0];
}
// Preprocesare: construim matricea up
for (int j = 1; j < LOG; j++) {
for (int i = 1; i <= N; i++) {
up[i][j] = up[up[i][j-1]][j-1];
}
}
// Raspundem la intrebari
while (M--) {
int Q, P;
fin >> Q >> P;
// Parcurgem bitii lui P
for (int j = LOG - 1; j >= 0; j--) {
if (P >= (1 << j)) {
Q = up[Q][j];
P -= (1 << j);
}
}
fout << Q << "\n";
}
fin.close();
fout.close();
return 0;
}