Cod sursa(job #2760705)

Utilizator Maniu_DianaManiu Maria Diana Maniu_Diana Data 28 iunie 2021 18:53:52
Problema Subsir crescator maximal Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.98 kb
#include <bits/stdc++.h>

using namespace std;

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

int n, a[100005], dp[100005], ans[100005];

void citire()
{
    fin >> n;
    for(int i = 1; i <= n; i ++)
        fin >> a[i];
}

void solve()
{
    int poz = 1;
    for(int i = 1; i <= n; i ++)
    {
        dp[i] = 1;
        for(int j = 1; j < i; j ++)
        {
            if(a[j] < a[i])
            {
                dp[i] = max(dp[i], 1 + dp[j]);
            }
        }
    }
    for(int i = 1; i <= n; i ++)
    {
        if(dp[i] > dp[poz])
            poz = i;
    }
    fout << dp[poz] << '\n';
    int k = 0;
    ans[++k] = a[poz];
    for(int i = poz - 1; i >= 1; i --)
    {
        if(a[i] < a[poz] && dp[i] == dp[poz] - 1)
        {
            poz = i;
            ans[++k] = a[i];
        }
    }
    for(int i = k; i >= 1; i --)
        fout << ans[i] << ' ';
}

int main()
{
    citire();
    solve();
    return 0;
}