Cod sursa(job #2674038)

Utilizator Rowantoie vlad Rowan Data 18 noiembrie 2020 15:11:46
Problema Subsir crescator maximal Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.13 kb
//
//  main.cpp
//  scmax
//
//  Created by Toie Vlad on 18/11/2020.
//

#include <iostream>
#include <fstream>
#include <vector>

using namespace std;

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

vector<int> lis(vector<int> const& a) {
    int n = a.size();
    vector<int> d(n, 1), p(n, -1);
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < i; j++) {
            if (a[j] < a[i] && d[i] < d[j] + 1) {
                d[i] = d[j] + 1;
                p[i] = j;
            }
        }
    }

    int ans = d[1], pos = 0;
    for (int i = 1; i < n; i++) {
        if (d[i] > ans) {
            ans = d[i];
            pos = i;
        }
    }

    vector<int> subseq;
    while (pos != -1) {
        subseq.push_back(a[pos]);
        pos = p[pos];
    }
    reverse(subseq.begin(), subseq.end());
    return subseq;
}

int main(int argc, const char * argv[]) {
    int n, val;
    vector<int> v;
    fin>>n;
    while(n>0) {
        fin>>val;
        v.push_back(val);
        n--;
    }
    v = lis(v);
    fout<<v.size()<<endl;
    for(auto i = v.begin(); i!=v.end(); i++) {
        fout<<*i<<" ";
    }
    fout<<endl;
    return 0;
}