Cod sursa(job #2485884)

Utilizator ana.pintiliciucAna Maria Pintiliciuc ana.pintiliciuc Data 2 noiembrie 2019 10:27:32
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.99 kb
#include <cstdio>

using namespace std;

int n;
long long a[100005], v[100005], p[100005];
int lv;

int caut_bin(int x, int lg)
{
    int i;
    for(i=lv; lg!=0; lg>>=1)
        if(i - lg >= 0 && v[i-lg] >= x)
            i-=lg;
    return i;
}

int sol[100005], lg=1;

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

    scanf("%d", &n);
    int vm=0;
    for(int i=0; i<n; i++)
    {
        if(i > lg)
            lg *= 2;
        scanf("%d", &a[i]);
        int poz=caut_bin(a[i], lg);
        v[poz]=a[i];
        if(poz==lv)
            lv++;
        p[i]=poz;

        if(p[i]>p[vm])
            vm=i;
    }
    printf("%d\n", p[vm]+1);
    int ant=p[vm], aux=lv-1;
    sol[aux--]=a[vm];
    for(int i=vm; i>=0 && aux>=0; i--)
    {
        if(p[i]==ant)
        {
            sol[ant]=a[i];
            ant--;
        }
    }
    for(int i=0; i<=p[vm]; i++)
        printf("%d ", sol[i]);

    return 0;
}