Cod sursa(job #1652654)

Utilizator andreiskiorAndrei Cristian Nastase andreiskior Data 15 martie 2016 11:11:13
Problema Subsir crescator maximal Scor 65
Compilator cpp Status done
Runda Arhiva educationala Marime 1.07 kb
#include <stdio.h>

#define N_MX 100000

int V[N_MX],Q[N_MX],P[N_MX];

int main()
{
    freopen("scmax.in","r",stdin);
    freopen("scmax.out","w",stdout);
    int n,i,j,st,dr,mij,nr,poz,k = 1;
    scanf("%d",&n);
    scanf("%d",&Q[1]);
    V[1] = Q[1];
    P[1] = 1;
    for(i = 2; i <= n; ++i){
        scanf("%d",&nr);
        V[i] = nr;
        st = 1; dr = k ;
        poz = -1;
        while(st <= dr)
        {
            mij = (st + dr) / 2;
            if(nr <= Q[mij])
            {
                dr = mij - 1;
                poz = mij;
            }
            else
                st = mij + 1;
        }
        if(poz == -1)
        {
            Q[++k] = nr;
            P[i] = k;
        }
        else
        {
            Q[poz] = nr;
            P[i] = poz;
        }
    }
    st = 0;dr = k;
    printf("%d\n",k);
    for(i = n ; i >= 1; --i)
    {
        if(P[i] == k)
        {
           Q[i] = V[P[i]];
           --k;
        }
    }
    for(i = 1; i <= dr; ++i)
        printf("%d ",Q[i]);
    return 0;
}