Cod sursa(job #1215609)

Utilizator angelaAngela Visuian angela Data 1 august 2014 16:02:07
Problema Subsir crescator maximal Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 0.94 kb
// OK
#include <fstream>
#include <iomanip>
using namespace std;
const int Dim = 100001;

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

int a[Dim], n, L;
int Ind[Dim];
int P[Dim];

void Read();
void Write(int k);
int Din();
int BS(int i);

int main()
{
    Read();
    for (int i = 1; i <= n; ++i )
    {
        int j = BS(i);
        P[i] = Ind[j - 1];
        Ind[j] = i;
        if (j == L + 1)
            L++;
    }

    os << L << '\n';
    Write(Ind[L]);

    is.close();
    os.close();
    return 0;
}

int BS(int i)
{
    int st = 1, dr = L, m, j = L + 1;
    while ( st <= dr )
    {
        m = (st + dr) / 2;
        if ( a[i] < a[Ind[m]] )
            dr = m - 1, j = m;
        else
            st = m + 1;
    }
    return j;
}

void Read()
{
    is >> n;
    for ( int i = 1; i <= n; ++i )
        is >> a[i];
}

void Write(int k)
{
    if ( !k ) return;
    Write(P[k]);
    os << a[k] << ' ';
}