Pagini recente » Cod sursa (job #2376949) | Cod sursa (job #1900815) | Cod sursa (job #709029) | Cod sursa (job #1282375) | Cod sursa (job #1375217)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f ("stramosi.in");
ofstream g ("stramosi.out");
const int NMAX = 250000 + 1, LOGMAX = 18;
int n, q;
int d[LOGMAX][NMAX];
void citeste() {
f >> n >> q;
for (int i = 1; i <= n; i++) f >> d[0][i];
}
void precalculeaza() {
for (int i = 1; (1 << i) <= n; i++) {
for (int j = 1; j <= n; j++)
d[i][j] = d[i - 1][d[i - 1][j]];
}
}
void rezolva() {
int a, b;
int k;
while (q--) {
f >> a >> b;
//cout << a << ' ' << b << ' ';
k = 0;
while(b > 0) {
if (b % 2 == 1) a = d[k][a];
k++;
b = b / 2;
}
g << a << '\n';
}
}
int main() {
citeste();
precalculeaza();
rezolva();
}