Cod sursa(job #1255933)

Utilizator andru47Stefanescu Andru andru47 Data 5 noiembrie 2014 16:32:30
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.97 kb
#include <cstdio>
using namespace std;
int A[100001],a[100001],q[100001],poz[100001],lenn,len,i,j,n,pozz;
bool ok;
int binar(int x)
{
    int st,dr,mij,pozz;
    ok=false;
    st=1;
    dr=len;
    mij=(st+dr)/2;
    while (st<=dr)
    {
        if (q[mij]>x)dr=mij-1;
        else if (q[mij]<x)st=mij+1;
        else {ok=true;pozz=mij;break;}
        mij=(st+dr)/2;
    }
    if (ok==true)return pozz;
    return st;
}
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]);
    poz[1]=1;
    q[1]=a[1];
    len=1;
    for (i=2;i<=n;i++)
    {   ok=false;
        pozz=binar(a[i]);
        q[pozz]=a[i];
        poz[i]=pozz;
        if (pozz>len)len++;
    }
    for (i=n;i>=1&&len>0;i--)
    {
        if (poz[i]==len){A[++lenn]=a[i];len--;}
    }
    printf("%d\n",lenn);
    for (i=lenn;i>=1;i--)
        printf("%d ",A[i]);
    return 0;
}