Cod sursa(job #2037025)

Utilizator alextodoranTodoran Alexandru Raul alextodoran Data 11 octombrie 2017 16:46:27
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.17 kb
#include <iostream>
#include <fstream>
#define DN 100002
using namespace std;

int n, e, v[DN], eml[DN], eeml[DN], pe[DN], iue[DN], af[DN] ,mx, imx, l, r, mid;

int main()
{
    ifstream fin ("scmax.in");
    ofstream fout ("scmax.out");
    fin >> n;
    eeml[0] = 1;
    for(int i = 1; i <= n; i++)
    {
        fin >> v[i];
        e = v[i];
        l = 0;
        r = i - 1;
        while(l < r)
        {
            mid = (l + r + 1) / 2;
            if(eml[mid] >= e|| !eeml[mid])
                r = mid - 1;
            else
                l = mid;
        }
        //cout << l << "\n";
        if(eml[l + 1] > e || !eeml[l + 1])
        {
            eml[l + 1] = e;
            iue[l + 1] = i;
            eeml[l + 1] = 1;
            pe[i] = iue[l];
            if(l + 1 > mx)
            {
                mx = l + 1;
                imx = i;
            }
        }

    }
    /*for(int i = 1; i <= n; i++)
        fout << eml[i] << " ";
    fout << "\n";*/
    fout << mx << "\n";
    for(int i = imx, j = mx; j; i = pe[i], j--)
        af[j] = v[i];
    for(int i = 1; i <= mx; i++)
        fout << af[i] << " ";
    return 0;
}