Cod sursa(job #1199168)

Utilizator lorundlorund lorund Data 18 iunie 2014 14:36:34
Problema Subsir crescator maximal Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.76 kb
#include <cstdio>
#define SIZE 100005

int N, v[SIZE];
int k, max[SIZE];

int search(int x){
    int li=1, ls=k;

    while (li<=ls){
        int m=(li+ls)/2;

        if (max[m]>x)
            li = m+1;
        else
            ls = m-1;
    }
    if (li==1 && max[1]<x)
        --li;
    return li;
}

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]);
    max[k=1] = v[N--];
    while (N){
        int p;

        p = search(v[N]);
        if (p>k){
            ++k;
        }
        max[p] = v[N];
        --N;
    }
    printf("%d\n", k);
    for (int i=k; i; --i)
        printf("%d ", max[i]);
    return 0;
}