Pagini recente » Cod sursa (job #1527407) | Cod sursa (job #2096042) | Cod sursa (job #2523116) | Cod sursa (job #2522200) | Cod sursa (job #1378819)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream f ("stramosi.in");
ofstream g ("stramosi.out");
const int NMAX = 250000 + 1;
const int LOGMAX = 18;
int n, m;
int tata[LOGMAX][NMAX];
vector <int> graf[NMAX];
void citeste() {
int t;
f >> n >> m;
for (int i = 1; i <= n; i++) f >> tata[0][i];
}
void precalculeaza() {
int ant;
for (int i = 1; (1 << i) <= n; i++)
for (int j = 1; j <= n; j++) {
ant = tata[i - 1][j];
tata[i][j] = tata[i - 1][ant];
}
}
int rez(int a, int p) {
for (int i = 0; (1 << i) <= p; i++)
if (p & (1 << i)) a = tata[i][a];
return a;
}
void rezolva() {
int a, p;
for (int i = 1; i <= m; i++) {
f >> a >> p;
g << rez(a, p) << '\n';
}
}
int main() {
citeste();
precalculeaza();
rezolva();
}