Cod sursa(job #1726869)

Utilizator dcutitoiuCutitoiu Adrian-Nicolae dcutitoiu Data 9 iulie 2016 11:47:29
Problema Subsir crescator maximal Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.12 kb
#include <iostream>
#include <fstream>
#include <iterator>
#include <vector>
using namespace std;

int main()
{
    int N;
    vector<int> a(100000);
    vector<int> parent(100000);
    vector<int> lungime(100000);

    ifstream in("scmax.in");
    ofstream out("scmax.out");


    in >> N;
    for(int i = 0; i < N; i++){
        in >> a[i];
    }

    parent[N - 1] = N - 1;
    lungime[N - 1] = N - 1;
    for(int i = N - 1; i >= 0; i--){
        int max_index = i;

        for(int j = i + 1; j < N; j++){
            if(a[i] < a[j] && lungime[max_index] < lungime[j]){
                max_index = j;
            }
        }

        lungime[i] = lungime[max_index] + 1;
        parent[i] = max_index;
    }

    int maxx = 0;
    for(int i = 1; i < N; i++){
        if(lungime[i] > lungime[maxx]){
            maxx = i;
        }
    }

    vector<int> solutie;
    while(maxx != parent[maxx]){
        solutie.push_back(a[maxx]);
        maxx = parent[maxx];
    }
    solutie.push_back(a[maxx]);

    copy(solutie.begin(), solutie.end(), ostream_iterator<int>(out, " "));

    return 0;
}