Cod sursa(job #1652630)

Utilizator andreiskiorAndrei Cristian Nastase andreiskior Data 15 martie 2016 10:46:25
Problema Subsir crescator maximal Scor 55
Compilator cpp Status done
Runda Arhiva educationala Marime 1.08 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[0]);
    V[0] = Q[0];
    P[0] = 1;
    for(i = 1; i < n; ++i){
        scanf("%d",&nr);
        V[i] = nr;
        st = 0; 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 + 1;
        }
    }
    st = 0;dr = k;
    printf("%d\n",k);
    for(i = n - 1; i >= 0; --i)
    {
        if(P[i] == k)
        {
           Q[st++] = V[P[i]];
           --k;
        }
    }
    for(i = 0; i < dr; ++i)
        printf("%d ",Q[i]);
    return 0;
}