Cod sursa(job #3249313)

Utilizator AndreiNicolaescuEric Paturan AndreiNicolaescu Data 15 octombrie 2024 20:47:38
Problema Subsir crescator maximal Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.89 kb
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
ifstream cin("scmax.in");
ofstream cout("scmax.out");
int n, lung, pozmax;
vector <int> v, dp, poz, rez;
int main()
{
    cin >> n;
    v.resize(n + 1);
    dp.resize(n + 1);
    poz.resize(n + 1);
    for(int i=1; i<=n; i++)
        cin >> v[i];
    dp[1] = 1;
    for(int i=2; i<=n; i++)
    {
        dp[i] = 1;
        for(int j=i-1; j>=1; j--)
            if(v[i] > v[j] && dp[i] < dp[j] + 1)
            {
                dp[i] = dp[j] + 1;
                poz[i] = j;
            }
        if(lung < dp[i])
        {
            lung = dp[i];
            pozmax = i;
        }

    }
    cout << lung << '\n';
    for(int i=pozmax; i!=0; i = poz[i])
        rez.push_back(v[i]);
    reverse(rez.begin(), rez.end());
    for(auto i : rez)
        cout << i << " ";

    return 0;
}