Cod sursa(job #1116902)

Utilizator ovidiu95Decean Ovidiu Ciprian ovidiu95 Data 22 februarie 2014 21:33:07
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.81 kb
#include<cstdio>
#define max 100005

int st,dr,nr,v[max],ind[max],cresc[max],i,n,c;

using namespace std;

int cauta(int x)
{
    int m;
    while(st<dr)
    {
        m=(st+dr)/2;
        if(cresc[m]>=x)dr=m;
        if(cresc[m]<x)st=m+1;

    }
    return st;
}

void scrie(int m)
{
    while(ind[m]!=nr) --m;
    --nr; if(nr) scrie(m);
    printf("%d ",v[m]);
}
int main()
{
    freopen("scmax.in","r",stdin);
    freopen("scmax.out","w",stdout);
    scanf("%d/n",&n);
    for(i=1;i<=n;++i) scanf("%d",v+i);
    cresc[1]=v[1]; ind[1]=1;
    nr=1;
    for(i=2;i<=n;++i)
    {
        st=1; dr=nr;
        c=cauta(v[i]);
        if(cresc[c]<v[i]){++nr; cresc[nr]=v[i]; ind[i]=nr;}
        else {cresc[c]=v[i]; ind[i]=c;}
    }
    printf("%d\n",nr);
    scrie(i);
    return 0;
}