Cod sursa(job #2059732)

Utilizator NannyiMaslinca Alecsandru Mihai Nannyi Data 7 noiembrie 2017 15:49:54
Problema Subsir crescator maximal Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 0.82 kb
#include <iostream>
#include <fstream>
using namespace std;
#define nmax 100005

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

int v[nmax],d[nmax],t[nmax];
int n,k,mx=0;

void afis(int x)
{
    if (x)
    {
        afis(t[x]);
        g<<v[x]<<' ';
    }
}

int main()
{
    f>>n;
    for (int i=1; i<=n; ++i)
        f>>v[i];
    t[1]=0;
    d[1]=1;
    for (int i=2; i<=n; ++i)
    {
        int p=0;
        int u=k;
        while (p<=u)
        {
            int mid=(p+u)/2;
            if (v[d[mid]]<v[i])
                p=mid+1;
            else
                u=mid-1;
        }
        if (p>k)
            k=p;
        d[p]=i;
        t[i]=d[p-1];
    }
    for (int i=1; i<=n; ++i)
        if (t[i]>t[mx])
            mx=i;
    g<<k<<'\n';
    afis(mx);
    return 0;
}