Cod sursa(job #1215614)

Utilizator angelaAngela Visuian angela Data 1 august 2014 16:14:03
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.95 kb
#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 st, int dr);

int main()
{
    Read();
    for (int i = 1; i <= n; ++i )
    {
        int j = BS(i, 1, L);

        P[i] = Ind[j];
        Ind[j + 1] = i;
        L = max(L, j + 1);
    }

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

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

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

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] << ' ';
}