Cod sursa(job #2414367)

Utilizator ElektrykT E S L A P E F E L I E Elektryk Data 24 aprilie 2019 15:35:37
Problema Subsir crescator maximal Scor 20
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.94 kb
#include <fstream>

using namespace std;

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

int n, st, dr, mid, mx;

long long v[100137];

int dp[100137];

long long bigStack[100137];

long long ans[100137];

int main()
{
    in>>n;
    for (register int i=1; i<=n; ++i)
    {
        in>>v[i];
        st=1;
        dr=bigStack[0];
        while (st<=dr)
        {
            mid=(st+dr)/2;
            if (bigStack[mid]<v[i])
                st=mid+1;
            else
                dr=mid-1;
        }
        dp[i]=dr+1;
        bigStack[0]=dr;
        bigStack[++bigStack[0]]=v[i];
    }
    for (register int i=1; i<=n; ++i)
        mx=max (mx, dp[i]);
    out<<mx<<'\n';
    ans[0]=mx;
    for (register int i=n; i>=1; --i)
        if (dp[i]==mx)
        {
            ans[mx]=v[i];
            --mx;
        }
    for (register int i=1; i<=ans[0]; ++i)
        out<<ans[i]<<" ";
    return 0;
}