Cod sursa(job #1190592)

Utilizator armandpredaPreda Armand armandpreda Data 25 mai 2014 14:59:56
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.9 kb
#include <cstdio>
#define LIM 100000

using namespace std;

int v[LIM+10],len[LIM+10],tata[LIM+10], lg;
int main()
{
    freopen("scmax.in","r",stdin);
    freopen("scmax.out","w",stdout);
    int n,i,max,poz, st, dr, mj;
    scanf("%d",&n);
    for(i=1;i<=n;++i)
        scanf("%d",v+i);
    for(i=1;i<=n;++i)
    {
        st=1; dr=lg;
        while(st<=dr){
            mj=(st+dr)>>1;
            if(v[i]>v[len[mj]])
                st=mj+1;
            else
                dr=mj-1;
        }
        tata[i]=len[dr];
        if(st>lg){
            lg = st;
            len[lg] = i;
        }
        else
            if(v[i]<v[len[st]])
                len[st]=i;
    }
    printf("%d\n", lg);
    poz = len[lg];
    for(i=1; i<=lg; i++)
    {
        len[i] = v[poz];
        poz=tata[poz];
    }
    for(i=lg; i>=1; i--)
        printf("%d ", len[i]);
    return 0;
}