Cod sursa(job #2553617)

Utilizator paul3ioanCirstean Paul Ioan paul3ioan Data 22 februarie 2020 10:29:54
Problema Subsir crescator maximal Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.92 kb
//#include <iostream>
#include <fstream>
using namespace std;
ifstream cin("scmax.in");
ofstream cout("scmax.out");
const int N = 100003;
int n ;
int pozmax;
int v[N], dp[N], urm[N];
int main() {
    cin >> n;
    for( int i =1 ;i <=n;i++)
        cin >> v[i];
    dp[n] = 1; urm[n] = 0;
    for( int i = n - 1 ; i > 0 ; i--)
    {
        dp[i] = 1; urm[i] = 1;
        for( int j =i  + 1 ;j <=n ;j ++)
        {
            if(v[i] < v[j] and dp[i] < dp[j] + 1)
            {
                dp[i] = 1 + dp[j];
                urm[i] = j;
            }
        }
    }
    /// det lungimea maxima
    int maxim = dp[1];
    pozmax = 1;
    for( int i = 2 ;i <=n;i ++)
        if(maxim < dp[i]){
            maxim = dp[i];
            pozmax = i;
        }
    cout << maxim<< '\n';
    /// afisez subsir cresc de lungime max
    int i = pozmax;
    while( i  != 0)
    {
        cout << v[i]<<" ";
        i = urm[i];
    }
    return 0;
}