Cod sursa(job #1049490)

Utilizator mariacMaria Constantin mariac Data 7 decembrie 2013 13:24:05
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.87 kb
#include <fstream>
#define MAX 100005
using namespace std;

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

int v[MAX], best[MAX], prec[MAX], secv[MAX], lsecv, N;
int cautb(int x)
{
    int st, dr, m;
    st = 0;
    dr = lsecv;
    m = (st + dr)/2;
    while( st  <= dr)
    {
        if( v[ secv[m]] < x ) st = m + 1;
            else dr = m - 1;
        m = (st + dr) /2;
    }
    return m;
}
void afis(int poz)
{
    if( prec[poz]) afis( prec[poz]);
    fout<<v[poz]<<" ";
}
int main()
{
    int i;
    fin >> N;
    for( i = 1; i <= N; i++)
        fin >> v[i];
    secv[1] = 1;
    lsecv = 1;
    for( i = 2; i <= N; i++)
    {
        int poz = cautb(v[i]);
        prec[i] = secv[ poz ] ;
        secv[ poz + 1] = i;
        if( poz == lsecv ) lsecv ++;

    }
    fout<<lsecv<<"\n";
    afis(secv[lsecv]);
    return 0;
}