Cod sursa(job #1649591)

Utilizator dianaorasanuDiana Orasanu dianaorasanu Data 11 martie 2016 14:19:03
Problema Subsir crescator maximal Scor 25
Compilator cpp Status done
Runda Arhiva educationala Marime 0.87 kb
#include <fstream>

#define INF 99999999
#define NMAX 100010

using namespace std;

ifstream fin("scmax.in");
ofstream fout("scmax.out");

int cb(int, int, int);
int i, j, n, S[NMAX], a[NMAX];
int maxi = 1;


int main()
{
    fin >> n;
    for(i = 1; i <= n; ++i)
        {
            fin >> S[i];
            a[i] = INF;
        }
    a[1] = S[1];
    for(i = 2; i <= n; ++i)
    {
        j = cb(0, maxi, S[i]);
        if(a[j+1] == INF)
            maxi++;
        if(a[j+1] > S[i])
            a[j+1] = S[i];
    }
    fout << maxi << '\n';
    for(i = 1; i <= maxi; ++i)
        fout << a[i] << ' ';
    return 0;
}

int cb(int st, int dr, int val)
{
    int i;
    int mij = st+dr+1;
    mij = mij/2;
    if(st == dr)
        return st;
    if(a[mij] >= val)
        return cb(st, mij-1, val);
    else
        return cb(mij, dr, val);
}