Cod sursa(job #868675)

Utilizator alecsandrualex cuturela alecsandru Data 31 ianuarie 2013 13:56:10
Problema Subsir crescator maximal Scor 65
Compilator cpp Status done
Runda Arhiva educationala Marime 1.04 kb
#include<cstdio>
#include<algorithm>
using namespace std;
int *it2,*it,n,q[100010],p[100010],v[100010],l,i,cl,sol[100010];
int main()
{
    freopen("scmax.in","r",stdin);
    freopen("scmax.out","w",stdout);
    scanf("%d",&n);
    for(i=0;i<n;i++)
    {
        scanf("%d",&v[i]);
    }
    for(i=0;i<n;i++)
    {
//daca e egal
        it2=lower_bound(q,q+l,v[i]);
        if(*it2==v[i]&&it!=q+l)
            continue;
        else
        {
            it=upper_bound(q,q+l,v[i]);
            if(it==q+l)
            {
                q[l]=v[i];
                l++;
                p[i]=l;
            }
            else
            {
                *it=v[i];
                p[i]=it-q+1;
            }
        }
    }
    printf("%d\n",l);
    cl=l;
    while(l>0)
    {
        for(i=n-1;i>=0;i--)
        {
            if(p[i]==l)
            {
                sol[l]=v[i];
                break;
            }
        }
        l--;
    }
    for(i=1;i<=cl;i++)
        printf("%d ",sol[i]);
    return 0;
}