Cod sursa(job #2104409)

Utilizator 1000Sabin Ilegitim 1000 Data 11 ianuarie 2018 17:13:58
Problema Subsir crescator maximal Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.11 kb
#include <fstream>
using namespace std;
ifstream cin("scmax.in");
ofstream cout("scmax.out");
int n, jm, im, lgmax, lg[100005], urm[100005], a[100005];
int main()
{
    cin >> n;
    for(int i = 1; i <= n; i ++)
        cin >> a[i];

  /*  for(int i = 1; i < n; i ++)
        if(a[i] == a[i + 1])
        {
            for(int j = i + 1; j <= n; j ++)
                a[j] = a[j + 1];
            i--;
            n--;
        } */

    lg[n] = 1;
    urm[n] = 0;
    for(int i = n - 1; i >= 1; i --)
    {
        jm = 0;
        lgmax = 0;
        for(int j = i + 1; j <= n; j ++)
        {
            if(a[i] < a[j] and lg[j] > lgmax)
            {
                lgmax = lg[j];
                jm = j;
            }
        }
        lg[i] = lgmax + 1;
        urm[i] = jm;
    }
    lgmax = lg[1];
    im = 1;
    for(int i = 2; i <= n; i ++)
    {
        if(lg[i] > lgmax)
        {
            lgmax = lg[i];
            im = i;
        }
    }
    cout << lgmax << '\n';
    do{
        cout << a[im] << " ";
        im = urm[im];
    }while(im != 0);

    return 0;
}