Cod sursa(job #1041936)

Utilizator angelaAngela Visuian angela Data 26 noiembrie 2013 13:22:08
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.1 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 st, int dr);

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

        P[i] = Ind[j];
     //   if (j == L or a[i] < a[Ind[j+1]])
    //    {
            Ind[j + 1] = i;
            L = max(L, j + 1);
     //W   }
    }

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

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

int BS(int i, int st, int dr)
{
    int m;
    bool ok = false;
    while ( st <= dr )
    {
        m = (st + dr) / 2;
        if ( a[Ind[m]] < a[i] )
            st = m + 1, ok = true;
        else
            dr = m - 1;
    }
    return dr;  // daca L = 0 => dr = 0;  daca a[i] > a[Ind[L]] => dr = L
}

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