Cod sursa(job #1644752)

Utilizator larecursividadLa Recursividad larecursividad Data 10 martie 2016 09:12:02
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.03 kb
#include <fstream>
#define InFile  "scmax.in"
#define OutFile "scmax.out"
#define MAX 100001

using namespace std;

ifstream fin  (InFile);
ofstream fout (OutFile);

void PRINT (unsigned int m);

unsigned int N;
unsigned int a[MAX];

unsigned int x[MAX], t[MAX];
unsigned int low, high, mid;
unsigned int i;

unsigned int Lmax;
unsigned int sol[MAX];

int main ()
{
    fin >> N;
    for (i=1; i<=N; i++)
        fin >> a[i];
        x[1] = 1;
    Lmax = 1;
    for (i=2; i<=N; i++)
    {
        low = 1;
        high = Lmax;
        while (low <= high)
        {
            mid = (low+high) / 2;
            if (a[i] > a[x[mid]])
                low = mid + 1;
            else
                high = mid - 1;
        }
        if (low > Lmax)
            Lmax++;
        x[low] = i;
        t[i] = x[low-1];
    }
    fout << Lmax << '\n';
    PRINT (x[Lmax]);
    return 0;
}

void PRINT (unsigned int mid)
{
    if (mid)
    {
        PRINT (t[mid]);
        fout << a[mid] << ' ';
    }
}