Cod sursa(job #1655258)

Utilizator andreiskiorAndrei Cristian Nastase andreiskior Data 17 martie 2016 21:03:08
Problema Subsir crescator maximal Scor 65
Compilator cpp Status done
Runda Arhiva educationala Marime 1.15 kb
#include <stdio.h>

#define N_MX 100001

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(Q[mij] < nr)
            {
                st = mij + 1;
            }
            else{
                dr = mij - 1;
                poz = mij;
            }
        }
        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;
        }
    }
    printf("%d",Q[1]);
    for(i = 2; i <= dr; ++i)
        printf(" %d",Q[i]);
    printf("\n");
    return 0;
}