Cod sursa(job #785270)

Utilizator my666013Test Here my666013 Data 8 septembrie 2012 11:46:53
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.78 kb
#include <cstdio>
#include <algorithm>
using namespace std;
#define Max 100001

int bst[Max],c[Max],v[Max],n,k;

int cbinar(int x,int l,int r)
{
    int m;
    while(l < r)
    {
        m = (l+r)/2;
        if(c[m] >= x) r = m; else l = m+1;
    }
    c[l] = x;
    if(l == k + 1) k++;
    return l;
}

void tipar(int p,int w)
{
    if(w > 0)
    for(int i=p;i>0;i--)
    if( bst[i] == w )
    {
        tipar(i-1,w-1);
        printf("%d ",v[i]);
        return;
    }
}

int main()
{
    freopen("scmax.in","r",stdin);
    freopen("scmax.out","w",stdout);
        scanf("%d",&n);

        for(int i=1;i<=n;i++)scanf("%d",&v[i]);
        for(int i=1;i<=n;i++)bst[i] = cbinar(v[i],1,k+1);
   // for(int i=1;i<=n;i++) printf("%d ",bst[i]);

   printf("%d\n",k);
   tipar(n,k);

    return 0;
}