Cod sursa(job #1327987)

Utilizator lupvasileLup Vasile lupvasile Data 27 ianuarie 2015 18:56:20
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.69 kb
#include <iostream>
#include <fstream>

using namespace std;

ifstream f("scmax.in");
ofstream g("scmax.out");
#define cout g
#define nmax 100010

int i,n,v[nmax],lmax,p;
int P[nmax],L[nmax];

int binsrc(int val)
{
    int st(0),dr(lmax),m;
    while(st<=dr)
    {
        m=(st+dr)/2;
        if(v[L[m]]<val) st=m+1;
        else dr=m-1;
    }
    return st-1;
}

void afis(int x)
{
    if(P[x]!=0) afis(P[x]);
    cout<<v[x]<<' ';
}

int main()
{
    f>>n;
    for(i=1;i<=n;++i)
    {
        f>>v[i];
        p=binsrc(v[i]);
        L[p+1]=i;
        P[i]=L[p];
        lmax=max(lmax,p+1);
    }
    cout<<lmax<<'\n';
    afis(L[lmax]);
    return 0;
}