Pagini recente » Cod sursa (job #2849361) | Cod sursa (job #723578) | Cod sursa (job #89211) | Cod sursa (job #2683153) | Cod sursa (job #1434819)
#include <fstream>
#include <vector>
#include <array>
using namespace std;
constexpr int max_adanc = 21;
using tabel = array<vector<int>, max_adanc>;
void citeste_date(ifstream& f, int& m, tabel& tabel_stramosi){
int n = 0;
f >> n >> m;
for(auto& x : tabel_stramosi){
x.resize(n+1); }
for(int i = 1; i <= n; ++i){
f >> tabel_stramosi[0][i]; }
for(int adanc = 1; adanc < max_adanc; ++adanc){
for(int i = 0; i <= n; ++i){
tabel_stramosi[adanc][i] = tabel_stramosi[adanc-1][tabel_stramosi[adanc-1][i]]; } } }
int query_tabel(const tabel& tabel_stramosi, int x, int n){
for(int i = 0; i < 32; ++i){
if(n & (1<<i)){
x = tabel_stramosi[i][x]; } }
return x; }
int main(){
ifstream f("stramosi.in");
ofstream g("stramosi.out");
int m;
tabel tabel_stramosi;
citeste_date(f, m, tabel_stramosi);
for(int i = 0, x, n; i < m; ++i){
f >> x >> n;
g << query_tabel(tabel_stramosi, x, n) << '\n'; }
return 0; }