Pagini recente » Cod sursa (job #2160584) | Cod sursa (job #1834269) | Cod sursa (job #1557508) | Cod sursa (job #3195439) | Cod sursa (job #1189882)
#include <fstream>
#include <cstring>
using namespace std;
const int N = 1 + 2.5e5, Q = 1 + 3e5;
struct Query{
int x, nr;
};
int T[N], aux[N];
Query query[Q];
int main(){
ifstream in("stramosi.in");
int n, nrQ, LG = 0;
in >> n >> nrQ;
for (int i = 1 ; i <= n ; i++)
in >> T[i];
for (int i = 1 ; i <= nrQ ; i++){
in >> query[i].x >> query[i].nr;
LG = max(LG, query[i].nr);
}
in.close();
LG = 32 - __builtin_clz(LG);
for (int i = 0 ; i <= LG ; i++){
for (int j = 1 ; j <= nrQ ; j++)
if ( query[j].nr & (1 << i) )
query[j].x = T[ query[j].x ];
memcpy(aux, T, sizeof(T));
for (int j = 1 ; j <= n ; j++)
T[j] = aux[ aux[j] ];
}
ofstream out("stramosi.out");
for (int i = 1 ; i <= nrQ ; i++)
out << query[i].x << '\n';
out.close();
return 0;
}