Cod sursa(job #1413227)

Utilizator vasica38Vasile Catana vasica38 Data 1 aprilie 2015 18:59:17
Problema Subsir crescator maximal Scor 95
Compilator cpp Status done
Runda Arhiva educationala Marime 0.9 kb
#include<stdio.h>
#include<algorithm>

using namespace std;

int a[100001],v[100001],best[100001];

int i,j,k,m,u,t,n;

int cauta(int x)
{
    int ic=1;
    int sf=v[0];
    while (ic<=sf)
    {
        int mijl=(ic+sf)/2;
        if (v[mijl]>=x) sf=mijl-1;
            else ic=mijl+1;
    }
    return ic;
}

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]);
    v[1]=a[1];
    v[0]=1;
    best[0]=1;
    for (i=2; i<=n; ++i)
    {
        int poz=cauta(a[i]);
        v[poz]=a[i];
        best[i]=poz;
        v[0]=max(poz,v[0]);
    }
    j=v[0];
    i=n;
    printf("%d\n",v[0]);
    while (i>=1)
    {
        if (best[i]==j)
        {
            --j;
            v[++u]=a[i];
        }
    --i;
    }
    for (i=u-1; i>=1; --i) printf("%d ",v[i]);
    return 0;
}