Cod sursa(job #2059744)

Utilizator NannyiMaslinca Alecsandru Mihai Nannyi Data 7 noiembrie 2017 15:56:03
Problema Subsir crescator maximal Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 0.86 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],lung[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;
        lung[i]=p;
        t[i]=d[p-1];
    }
    for (int i=1; i<=n; ++i)
        if (lung[mx]<lung[i])
            mx=i;
    g<<lung[mx]<<'\n';
    afis(mx);
    return 0;
}