Pagini recente » Cod sursa (job #1622361) | Cod sursa (job #1111935) | Cod sursa (job #2244960) | Cod sursa (job #582936) | Cod sursa (job #3134311)
#include <iostream>
#include <vector>
#include <fstream>
using namespace std;
int main() {
ifstream f1("../stramosi.in");
ofstream f2("../stramosi.out");
int N, M;
f1 >> N >> M;
vector<int> stramosi(N);
for (int i = 0; i < N; i++)
f1 >> stramosi[i];
int stramosi_m[25003][19] = {0};
for (int i = 0; i < N; i++)
stramosi_m[i][0] = stramosi[i];
for (int j = 1; j < 18; j++) {
for (int i = 0; i < N; i++) {
if (stramosi_m[i][j - 1] != 0)
stramosi_m[i][j] = stramosi_m[stramosi_m[i][j - 1] - 1][j - 1];
}
}
for (int i = 0; i < M; i++) {
int Q, P;
f1 >> Q >> P;
int curent = Q;
int n_stramos = P;
while (n_stramos > 0 && curent != 0) {
int p = 0;
while ((1 << p) <= n_stramos)
p++;
p--;
curent = stramosi_m[curent - 1][p];
n_stramos -= (1 << p);
}
f2 << curent << endl;
}
f1.close();
f2.close();
return 0;
}