Cod sursa(job #251019)

Utilizator crawlerPuni Andrei Paul crawler Data 1 februarie 2009 17:08:51
Problema Subsir crescator maximal Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.83 kb
#include <stdio.h>

#define Nmax 100100

int a[Nmax], b[Nmax], n, max;

int main()
{
    freopen("scmax.in","r",stdin);
    freopen("scmax.out","w",stdout);
    
    scanf("%d", &n);
    
    for (int i=1;i<=n;++i)
    scanf("%d", a+i);
    
    max = 1;
    b[1] = 1;    
    
    for (int i=2;i<=n;++i)
    {
        int st=0,dr=max,mij;    
        
        while (st<dr)
        {
            mij = (st+dr)/2;                
            if (a[b[mij]] < a[i])
            dr = mij; else st=mij;            
        }
        mij = st;
        while (a[b[mij]] < a[i] && mij<=max) ++mij;
        if (a[b[mij]] > a[i]) b[mij] = i;
        if (mij > max) b[++max] = i;
    }
    
    printf("%d\n", max);
    
    for (int i=1;i<=max;++i) printf("%d ", a[b[i]]); printf("\n");    
    
    return 0;    
}