Cod sursa(job #1824459)

Utilizator Matei_IgnutaMatei Ignuta Matei_Ignuta Data 7 decembrie 2016 21:00:15
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.12 kb
#include <stdio.h>

using namespace std;
int v[100000+1], s[100000+1], l[100000+1], last, mid, n, maxs, maxd, j;
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]);
        if(v[i]>s[last])
        {
            s[++last]=v[i];
            maxs=last;
        }
        else
        {
            maxs=1;
            maxd=last;
            while(maxs<maxd)
            {
                mid=(maxs+maxd)/2;
                if(v[i]<=s[mid])
                    maxd=mid-1;
                else
                    maxs=mid+1;
            }
            if(s[maxs]>=v[i])
                s[maxs]=v[i];
            else
            {
                maxs++;
                s[maxs]=v[i];
            }
        }
        l[i]=maxs;
    }
    printf("%d\n", last);
    int aux=last;
    for(int i=n; i>0; i--)
        {
            if(aux!=l[i]) continue;
            s[aux]=v[i];
            aux--;
        }
    for(aux=1;aux<=last;aux++)
        printf("%d ", s[aux]);
    return 0;
}