Cod sursa(job #592683)

Utilizator mihai995mihai995 mihai995 Data 29 mai 2011 21:30:53
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.74 kb
#include <fstream>
using namespace std;

const int N=100005;
int v[N],a[N],p[N],rez[N],n;

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

int bs(int x)
{
    int i,step=1<<16;
    for (i=0;step;step>>=1)
        if (i+step<=a[0] && a[i+step]<x)
            i+=step;
    return i+1;
}

int main()
{
    int i,x,nr;
    in>>n;
    for (i=1;i<=n;i++)
    {
        in>>v[i];
        x=bs(v[i]);
        if (x>a[0])
            a[0]=x;
        a[x]=v[i];
        p[i]=x;
    }
    out<<a[0]<<"\n";
    nr=a[0];
    rez[a[0]+1]=2000000001;
    for (i=n;i;i--)
        if (p[i]==a[0] && rez[a[0]+1]>v[i])
            rez[a[0]--]=v[i];
    for (i=1;i<=nr;i++)
        out<<rez[i]<<" ";
    out<<"\n";
    return 0;
}