Cod sursa(job #3221628)

Utilizator Seba1030Banescu Stefan Sebastian Seba1030 Data 7 aprilie 2024 16:30:08
Problema Subsir crescator maximal Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.92 kb
#include <fstream>

using namespace std;

int v[100005], dp[100005], prv[100005], sol[100005];

int main()
{
    ifstream cin( "scmax.in" );
    ofstream cout( "scmax.out" );
    int n, i, cnt = 0, j, maxcnt = 0, st, dr;
    cin >> n;
    for( i = 0; i < n; i++ ){
        cin >> v[i];
    }
    for( i = 0; i < n; i++ ){
        dp[i] = 1;
        prv[i] = -1;
        for( j = 0; j < i; j++ ){
            if( v[j] < v[i] ){
                if( dp[j] + 1 > dp[i] ){
                    prv[i] = j;
                }
                dp[i] = max( dp[j] + 1, dp[i] );
            }
        }
        if( dp[i] > maxcnt ){
            st = i;
            dr = prv[i];
            maxcnt = dp[i];
        }
    }
    cout << maxcnt << '\n';
    int k = 0, poz = st;
    while( poz != -1 ){
        k++;
        sol[k] = v[poz];
        poz = prv[poz];
    }
    for( i = k; i >= 1; i-- ){
        cout << sol[i] << ' ';
    }

    return 0;
}