Cod sursa(job #1255924)

Utilizator savulescustefanSavulescu Stefan savulescustefan Data 5 noiembrie 2014 16:18:40
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.95 kb
#include <cstdio>

using namespace std;
int a[100004],b[100004],c[100004],d[100004],i,s,dr,nr,r,n,m,q;
int main()
{
    freopen ("scmax.in","r",stdin);
    freopen ("scmax.out","w",stdout);
    scanf ("%d", &n);
    for (i=1;i<=n;i++)
        scanf ("%d", &a[i]);
    for (i=1;i<=n;i++)
    {
        s=1;
        dr=nr;
        while (s<=dr)
        {
            m=(s+dr)/2;
            if (b[m]==a[i])
                break;
            if (b[m]<a[i])
                s=m+1;
            else
                dr=m-1;
        }
        if (b[m]==a[i])
            c[i]=m;
        else
        {
            b[s]=a[i];
            c[i]=s;
            if (s>nr)
                nr=s;
        }
    }
    q=nr;
    for (i=n;i>=1;i--)
    {
        if (c[i]==nr)
        {
            d[++r]=a[i];
            nr--;
        }
    }
    printf ("%d\n", q);
    for (i=q;i>=1;i--)
        printf ("%d ", d[i]);
    return 0;
}