Cod sursa(job #2322008)

Utilizator Dragne.Andrei11Dragne Andrei Dragne.Andrei11 Data 16 ianuarie 2019 23:13:17
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.97 kb
#include <bits/stdc++.h>

using namespace std;

int   v[100001];
int aux[100001];
int poz[100001];
int sol[100001];

int main()
{
    freopen("scmax.in", "r", stdin);
    freopen("scmax.out", "w", stdout);
    int n, i, k, st, dr, med;

    scanf("%d",&n);
    k=0;
    for(i=1; i<=n; i++)
    {
        scanf("%d",&v[i]);
        st=0;
        dr=k;
        while(st<dr)
        {
            med=(st+dr)/2;
            if(aux[med]==v[i])
                st=dr=med;
            else if(aux[med]<v[i])
                st=med+1;
            else
                dr=med;
        }
        med=(st+dr)/2;
        if(st==k && v[i]>=aux[k])
            k++;
        aux[med]=v[i];
        poz[i]=med;
    }
    printf("%d\n",k);
    dr=k-1;
    for(i=n; i>0; i--)
    {
        if(poz[i]==dr)
        {
            sol[dr]=i;
            dr--;
        }
    }
    for(i=0; i<k; i++)
    {
        printf("%d ",v[sol[i]]);
    }

    return 0;
}