Cod sursa(job #3169064)

Utilizator zetef3Dediu Stefan zetef3 Data 14 noiembrie 2023 09:05:15
Problema Subsir crescator maximal Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.97 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>

using namespace std;

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

const int NMAX=1e5+1;

int n;
int a[NMAX], d[NMAX], p[NMAX];

vector<int> lis(int v[]) {
    for (int i=1;i<=n;i++) {
        d[i]=1;
        p[i]=-1;
    }

    for (int i=1;i<=n;i++) {
        for (int j=1;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=1;
    for (int i=2;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()
{
    f >> n;
    for (int i=1;i<=n;i++) {
        f >> a[i];
    }

    vector<int> ans=lis(a);
    g << ans.size() << '\n';
    for (int x:ans) g << x << ' ';
    return 0;
}