Cod sursa(job #1075144)

Utilizator vladdy47Bucur Vlad Andrei vladdy47 Data 8 ianuarie 2014 18:01:42
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.96 kb
#include <cstdio>

using namespace std;

int stiv[100069],poz[100069],a[100069],u[100069];
int i,m,n,k;

int cautbin (int x,int m,int stiv[])
{
    int st,dr,POZ,mij;
    st=1;
    dr=m;
    POZ=0;
    while (st<=dr && POZ==0)
    {
        mij=(st+dr)/2;
        if (stiv[mij]==x) POZ=mij;
        else if (stiv[mij]<x) st=mij+1;
        else dr=mij-1;
    }

    if (POZ==0) return st;
    return POZ;

}
int main ()
{
    freopen("scmax.in","r",stdin);
    freopen("scmax.out","w",stdout);
    scanf("%d", &n);
    for (i=1; i<=n; i++) scanf("%d", &a[i]);
    stiv[1]=a[1];
    poz[1]=1;
    m=1;

    for (i=2; i<=n; i++)
    {
        poz[i]=cautbin(a[i],m,stiv);
        stiv[poz[i]]=a[i];
        if(poz[i]>m) m++;

    }


    for (i=n; i>=1; i--)
        if (poz[i]==m)
        {
            u[++k]=a[i];
            m--;
        }

    printf("%d\n", k);
    for (i=k; i>=1; i--) printf("%d ",u[i]);

    return 0;
}