Cod sursa(job #1398928)

Utilizator Alexa2001Alexa Tudose Alexa2001 Data 24 martie 2015 14:22:00
Problema Subsir crescator maximal Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.7 kb
#include <cstdio>
#define N 100005

using namespace std;
int nr,a[N],i,poz,p[N],h[N],v[N],n;

inline int bs(int x)
{
    int p,u,mj;
    p=1;u=nr;

    if(v[nr]<x) return nr+1;
    while(p<=u)
    {
        mj=(p+u)/2;
        if(v[mj]<x) p=mj+1;
        else u=mj-1;
    }
    return p;
}
int main()
{
    freopen("scmax.in","r",stdin);
    freopen("scmax.out","w",stdout);

    scanf("%d",&n);

    nr=0;
    for(i=1;i<=n;++i)
    {
        scanf("%d",&a[i]);
        poz=bs(a[i]);
        if(poz>nr) ++nr,poz=nr;

        p[i]=poz;
        v[nr]=a[i];
    }

    printf("%d\n",nr);

    poz=nr;

    for(i=n;i>=1;--i)
    if(p[i]==poz) h[poz]=a[i],--poz;

    for(i=1;i<=nr;++i) printf("%d ",h[i]);
    return 0;
}