Cod sursa(job #1261909)

Utilizator Eduard6421Eduard Gabriel Eduard6421 Data 12 noiembrie 2014 20:24:00
Problema Subsir crescator maximal Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 0.79 kb
#include<cstdio>
#include<algorithm>
#define NMAX 100000+1
using namespace std;
int v[NMAX],p[NMAX],q[NMAX],sol[NMAX];
int main ()
{
    freopen("scmax.in","r",stdin);
    freopen("scmax.out","w",stdout);
    int n,i,nq,*it,poz,lis;
    scanf("%d",&n);
    for(i=1; i<=n; i++)
        scanf("%d",&v[i]);
    nq=1;
    q[1]=v[1];
    p[1]=1;
    for(i=2; i<=n; i++)
    {
        it= upper_bound(q+1,q+nq+1,v[i]);
        poz=(int)(it-q);
        if(poz>nq)
        {
            ++nq;
        }
        q[poz]=v[i];
        p[i]=poz;
    }
    printf("%d\n",nq);
    lis=nq;
    poz=n;
    for(i=lis; i>0; i--)
    {
        while(p[poz]!=lis)
            poz--;
        sol[lis]=v[poz];
        lis--;
    }
    for(i=1; i<=nq; i++)
        printf("%d ",sol[i]);
}