Pagini recente » Cod sursa (job #1072481) | Cod sursa (job #3221363) | Cod sursa (job #2441504) | Cod sursa (job #2544974) | Cod sursa (job #3180639)
#include <fstream>
#define DIM 250005
using namespace std;
ifstream fin("stramosi.in");
ofstream fout("stramosi.out");
int n, m;
int stramosi[DIM][22];
int E[DIM];
int powersOf2[22];
void initE() {
for (int i = 2; i < DIM; i++) {
E[i] = E[i / 2] + 1;
}
}
void initPowersOf2() {
powersOf2[0] = 1;
for (int i = 1; i < 22; i++) {
powersOf2[i] = powersOf2[i - 1] * 2;
}
}
int query(int x, int y) {
while (x != 0 && y != 0) {
int power = E[y];
y -= powersOf2[power];
x = stramosi[x][power];
}
return x;
}
int main()
{
initE();
initPowersOf2();
fin >> n >> m;
for (int i = 1; i <= n; i++) {
fin >> stramosi[i][0];
for (int stramos = 1; stramos <= 21; stramos++) {
int order = stramosi[stramosi[i][stramos - 1]][stramos - 1];
if (order == 0)
break;
stramosi[i][stramos] = order;
}
}
for (int i = 1; i <= m; i++) {
int x, y;
fin >> x >> y;
fout << query(x, y) << "\n";
}
}