Cod sursa(job #920370)

Utilizator RynaquiAxinte Silviu Rynaqui Data 20 martie 2013 11:33:40
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.83 kb
#include <iostream>
#include <cstdio>
using namespace std;
int a[100100],p[100100],pr[100100],n,i,j,lmax,ST,DR,mi;
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]);
        for(ST=0,DR=lmax+1;DR-ST-1;)
        {
            mi=(ST+DR)/2;
            if(a[p[mi]]<a[i]) ST=mi;
            else DR=mi;
        }
        if(DR==lmax+1){
            lmax++;
            p[lmax]=i;
            pr[i]=p[lmax-1];
            continue;
        }
        if(a[i]<a[p[DR]])
        {
            p[DR]=i;
            pr[i]=p[ST];
        }
    }
    printf("%d\n",lmax);
    for(i=lmax,j=p[lmax];i>0;j=pr[j],i--)
    {
        p[i]=a[j];
    }
    for(i=1;i<=lmax;i++)
        printf("%d ",p[i]);
    return 0;
}