Cod sursa(job #1044356)

Utilizator addy01adrian dumitrache addy01 Data 29 noiembrie 2013 18:02:09
Problema Subsir crescator maximal Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 0.91 kb
#include <iostream>
#include <fstream>
using namespace std;

ifstream in("scmax.in");
ofstream out("scmax.out");

const int MAXN=1010;

int L,n;
int best[MAXN],tata[MAXN],H[MAXN],v[MAXN];

int BS(int x)
{
    int step,i=0;
    for(step=1;step<L;step<<=1);
    for(;step;step>>=1)
        if(i+step<=L&&v[H[step+i]]<x)
            i+=step;
    return i;
}

void afisare(int i)
{
    if(tata[i])
        afisare(tata[i]);
    out<<v[i]<<" ";
}

int main()
{
    in>>n;
    int i,now;
    for(i=1;i<=n;i++)
        in>>v[i];

    for(i=1;i<=n;i++)
    {
        now=BS(v[i]);
        best[i]=best[H[now]]+1;
        tata[i]=H[now];

        if(now==L)
            H[++L]=i;
        else
        if(v[H[now+1]]>v[i])
            H[now+1]=i;
    }
    out<<L<<"\n";
    for(i=1;i<=n;i++)
        if(best[i]==L)
    {
        afisare(i);
        return 0;
    }

    return 0;
}