Cod sursa(job #2164215)

Utilizator alexandra_paticaAndreea Alexandra Patica alexandra_patica Data 12 martie 2018 22:12:50
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.79 kb
#include <cstdio>
using namespace std;

int n, a[100001], 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 (int i=1; i<=n; i++) scanf("%d", &a[i]);

    a[0]=2000000000;
    for (int i=n; i>0; i--){
        poz[i]=0;
        p=1;
        u=Max;

        while (p<=u){
            m=(p+u)/2;
            if (a[i]<a[l[m]]) p=m+1;
            else u=m-1;
        }

        if (p>Max){
            Max=p;
            poz[i]=l[p-1];
            l[p]=i;
        }
        else{
            poz[i]=l[p-1];
            if (a[l[p]]<a[i]) l[p]=i;
        }
    }
    printf("%d\n", Max);

    for (int i=l[Max]; i>0; i=poz[i])
        printf("%d ", a[i]);
}