Pagini recente » Cod sursa (job #1428690) | Cod sursa (job #1792478) | Cod sursa (job #1059084) | Cod sursa (job #1748075) | Cod sursa (job #2988161)
#include <iostream>
#include <fstream>
#define MAX_LOG 20
using namespace std;
ifstream in("stramosi.in");
ofstream out("stramosi.out");
int tata[250001], stramosi[20][250001], n, m, nod, k;
void calculeazaStramos(){
int stramos0;
for(int nod = 1; nod <= n; nod++){
stramosi[0][nod] = tata[nod];
}
for(int p = 1; p < MAX_LOG; p++){
for(int i = 1; i <= n; i++){
stramos0 = stramosi[p-1][i];
stramosi[p][i] = stramosi[p-1][stramos0];
}
}
}
int interogareStramos(int nod, int k){
int p = 1, e = 0;
while(2 * p <= k){
p *= 2;
e++;
}
if(p == k){
return stramosi[e][nod];
}
else{
return interogareStramos(stramosi[e][nod], k-p);
}
}
int main()
{
in >> n >> m;
for(int i = 1; i <= n; i++){
in >> tata[i];
}
calculeazaStramos();
for(int i = 1; i <= m; i++){
in >> nod >> k;
out << interogareStramos(nod,k) << '\n';
}
return 0;
}