Pagini recente » Cod sursa (job #1055424) | Cod sursa (job #334368) | Cod sursa (job #3285786) | Rating Alexandru Flavian (al_fl) | Cod sursa (job #1301202)
#include <vector>
using std::vector;
#include <fstream>
using std::ifstream;
using std::ofstream;
#include <iostream>
using std::cout;
class stramosi_memoizat{
const vector<int>& stramosi;
vector<vector<int> > memoizare;
void adauga_stramos_la(const int persoana){
const int ultimul_stramos = *memoizare[persoana].rbegin();
const int stramos_nou = stramosi[ultimul_stramos];
memoizare[persoana].push_back(stramos_nou); }
public:
stramosi_memoizat(const vector<int>& S, const int n):
stramosi(S),
memoizare(n+1){
for(int i = 0; i <= n; ++i){
memoizare[i].push_back(i); } }
int operator()(const int grad, const int persoana){
while(memoizare[persoana].size() <= grad){
adauga_stramos_la(persoana); }
return memoizare[persoana][grad]; } };
int main(){
ifstream f("stramosi.in");
ofstream g("stramosi.out");
int marime_familie = 0, nr_intrebari;
f >> marime_familie >> nr_intrebari;
vector<int> stramosi(marime_familie+1, 0);
for(int i = 1; i <= marime_familie; ++i){
f >> stramosi[i]; }
stramosi_memoizat s(stramosi, marime_familie);
for(int i = 0; i < nr_intrebari; ++i){
int P = 0, Q = 0;
f >> Q >> P;
//nu inteleg de ce, in problema, zic al P-lea stramos al lui Q
// dar ne dau datele cu Q mai intai!!
g << s(P, Q) << '\n'; }
return 0; }