Cod sursa(job #2557798)

Utilizator pandurelPanduru Andrei pandurel Data 25 februarie 2020 23:47:23
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.03 kb
#include <fstream>

/// Subsir crescator maximal

using namespace std;

ifstream f("scmax.in");
ofstream g("scmax.out");

int n, a[100001], r[100001], y=0, lmax=1, lungime_max;

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

void afisare()
{
    g<< lungime_max << '\n';
    for(int i=y; i>=1; --i)
        g<< a[r[i]] << ' ';
}

int main()
{
    int k=1, u=1, p[100001], q[100001];

    citire();

    q[1]=a[1];
    p[1]=1;

    for(int i=2; i<=n; ++i)
    {
        if(a[i]>q[k])
        {
            q[++k]=a[i];
            p[++u]=++lmax;
        }
        else for(int j=1; j<=k; ++j)
                if(q[j]>=a[i])
                {
                    q[j]=a[i];
                    p[++u]=j;
                    break;
                }
    }

    lungime_max=lmax;

    for(int i=u; i>=1; --i)
    {
        while(p[i]!=lmax)
            --i;
        r[++y]=i;
        lmax--;
        if(lmax==0)
            break;
    }

    afisare();

    return 0;
}