Cod sursa(job #1274105)

Utilizator thewildnathNathan Wildenberg thewildnath Data 23 noiembrie 2014 12:27:03
Problema Subsir crescator maximal Scor 65
Compilator cpp Status done
Runda Arhiva educationala Marime 1.04 kb
#include<stdio.h>

const int NMAX = 100000;
const int INF = 2000000000;

int minim[NMAX+1];

inline int cautb(int x)
{
       int st=0, dr=NMAX, med;
       
       while(st<=dr)
       {
                    med=(st+dr)>>1;
                    
                    if(minim[med]>=x)
                                     dr=med-1;
                    else
                                     st=med+1;
       }
       
       return st;
}

int main()
{
    freopen("scmax.in", "r", stdin);
    freopen("scmax.out", "w", stdout);
    
    int n, lmax=0, x, poz=0;
    
    scanf("%d", &n);
    
    for(int i=1; i<NMAX; ++i)
            minim[i]=INF;

    for(int i=1; i<=n; ++i)
    {
            scanf("%d", &x);
            
            poz=cautb(x);
            
            minim[poz]=x;
            
            if(poz>lmax)
                        lmax=poz;
    }
    
    printf("%d\n", lmax);
    
    for(int i=1; i<=lmax; ++i)
            printf("%d ", minim[i]);
    printf("\n");
    
    return 0;
}