Cod sursa(job #1903187)

Utilizator alexandra_paticaAndreea Alexandra Patica alexandra_patica Data 5 martie 2017 00:40:52
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.82 kb
#include <cstdio>
#include <cstdlib>
using namespace std;


int n, a[100001], i, l[100001], poz[100001], m, Max, p, u, k;

int main (){
    freopen("scmax.in", "r", stdin);
    freopen("scmax.out", "w", stdout);

    scanf("%d", &n);
    for (i=1; i<=n; i++)
        scanf("%d", &a[i]);

    a[0]=2000000000;
    for (i=n; i>0; i--){
        poz[i]=0;
        p=1; u=Max;
        while (p<=u){
            m=p+(u-p)/2;
            if (a[i]<a[l[m]]) p=m+1;
            else u=m-1;
        }
        k=p;
        if (k>Max){
            Max=k;
            poz[i]=l[k-1];
            l[k]=i;
        }
        else{
            poz[i]=l[k-1];
            if (a[l[k]]<a[i]) l[k]=i;
        }
    }
    printf("%d\n", Max);
    for (i=l[Max]; i>0; i=poz[i])
        printf("%d ", a[i]);
    return 0;

}