Cod sursa(job #181596)

Utilizator DorinOltean Dorin Dorin Data 18 aprilie 2008 17:10:19
Problema Subsir crescator maximal Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 0.85 kb
# include <stdio.h>

# define input "scmax.in"
# define output "scmax.out"

# define max 100001

int a[max],v[max],ret[max];
int i, n, p, sz;

int search(int x)
{
    int pow,pos;
    for(pow = 1; pow <= sz; pow<<=1);
    for(pos = 0; pow; pow>>=1 )
            if(pos+pow <= sz && v[pos+pow] < x) pos+=pow;
            
    return pos;
}

int main()
{
    freopen(input,"r", stdin);
    freopen(output,"w", stdout);
    
    scanf("%d ",&n);
    for(i = 1; i <= n; i++)
    {
        scanf("%d",&a[i]);
        if(a[i] > v[sz])
                 v[++sz] = ret[sz] = a[i];
        if(a[i] == v[sz]) continue;        
        p = search(a[i]) + 1;
        v[p] = a[i];
        if(p == sz)  ret[sz] = a[i];
    }
    
    printf("%d\n",sz);
    
    for( i = 1; i <= sz; i++)
         printf("%d ",ret[i]);
    
    return 0;
}