Cod sursa(job #1331031)

Utilizator rsteliRadu Stelian rsteli Data 31 ianuarie 2015 11:39:36
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.75 kb
#include <fstream>
using namespace std;
ifstream cin("scmax.in");
ofstream cout("scmax.out");

#define nmax 100010

int n,v[nmax],w[nmax],pre[nmax],s[nmax],k,t,l,p,u,mij;

int main()
{
    int i,j;
    cin>>n;
    for (i=1;i<=n;i++)
        cin>>v[i];
    w[1]=1;
    l=1;
    for (i=2;i<=n;i++)
    {
        p=1;
        u=l;
        while (p<=u)
        {
            mij=(p+u)/2;
            if (v[i]<=v[w[mij]])
                u=mij-1;
            else
                p=mij+1;
        }
        pre[i]=w[p-1];
        w[p]=i;
        if (p>l)
            l=p;
    }
    k=w[l];
    for (i=l;i;i--)
    {
        s[i]=v[k];
        k=pre[k];
    }
    cout<<l<<'\n';
    for (i=1;i<=l;i++)
        cout<<s[i]<<" ";
}