Cod sursa(job #1434819)

Utilizator tamionvTamio Vesa Nakajima tamionv Data 11 mai 2015 15:14:10
Problema Stramosi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.91 kb
#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; }