Cod sursa(job #553312)

Utilizator rares192Preda Rares Mihai rares192 Data 13 martie 2011 21:29:42
Problema Subsir crescator maximal Scor 65
Compilator cpp Status done
Runda Arhiva educationala Marime 1.03 kb
#include <fstream>
using namespace std;

#define NMAX 100004
int n;
int A[NMAX];
int V[NMAX], L;  // sirul care pastreaza elem sortate cresc si L dimensiunea lui (a CMLSC)
void Read();
void CLSC();  // O(n * log n)
void Write();

int main()
{
    Read();
    CLSC();
    Write();

    return 0;
}

void Read()
{
    ifstream fin("scmax.in");
    fin >> n;
    for ( int i = 0; i < n; i++ )
        fin >> A[i];
    fin.close();
}

void CLSC()
{
    int i, l, r, m;
    V[0] = A[0];
    L = 1;
    for (i = 1; i < n; i++)
    {
        if (A[i] > V[L-1]) V[L++] = A[i];
        else
        {
            l = 0, r = L-1;
            while (l < r)
            {
                m = (l + r) >> 1;
                if (A[i] < V[m]) r = m;
                else             l = m + 1;
            }
            if ( V[l-1] != A[i] ) V[l] = A[i];
        }
    }
}

void Write()
{
    ofstream fout("scmax.out");

    fout << L << "\n";
    for (int i = 0; i < L; i++)
        fout << V[i] << " ";
}