Cod sursa(job #1379903)

Utilizator UMihneaUngureanu Mihnea UMihnea Data 6 martie 2015 20:15:42
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.8 kb
#include <cstdio>
#define N 100001
using namespace std;

int n,i,L,d,s,m,a[N],b[N],c[N];
void print(int);

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]);
    L=0;
    for(i=1;i<=n;i++)
    {
        s=0; d=L+1;
        if(a[i]>a[c[L]])
        {
            L++;
            c[L]=i;
            b[i]=c[L-1];
            continue;
        }
        s=0; d=L;
        for(;d-s-1;)
        {
            m=(s+d)/2;
            if(a[i]>a[c[m]])s=m; else d=m;
        }
        b[i]=c[s];
        if(a[i]<a[c[d]])
            c[d]=i;
    }
    printf("%d\n",L);
    print(c[L]);
    return 0;
}
void print(int x)
{
    if(x==0)return;
    print(b[x]);
    printf("%d ",a[x]);
}