Cod sursa(job #2133590)

Utilizator OvidiuNicoleanuNicoleanu Ovidiu Augustin OvidiuNicoleanu Data 17 februarie 2018 10:20:56
Problema Subsir crescator maximal Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.05 kb
#include <fstream>
#define NMAX 1000000
using namespace std;
ifstream fin("lis.in");
ofstream fout("lis.out");
int a[NMAX];
int lgmax[NMAX];
int urm[NMAX];
int n;
int main()
{
    int  i, j, urmatorul, maxim, pozmax;
    fin >> n;
    for(i = 0; i < n; i++) fin >> a[i];
    //Cel mai mic sufix are un element
    lgmax[n - 1] = 1; urm[n - 1] = -1;
    for(i = n - 2; i >= 0; i--)
    {
        maxim = 1; urmatorul = -1;
        for(j = i + 1; j < n; j++)
            if(a[i] < a[j] && 1 + lgmax[j] > maxim)
            {
                maxim = 1 + lgmax[j];
                urmatorul = j;
            }
        lgmax[i] = maxim; urm[i] = urmatorul;
    }
    //AFISARE
    maxim = lgmax[0]; pozmax = 0;
    for(i = 1; i< n; i++)
        if(maxim < lgmax[i])
        {
            maxim = lgmax[i]; pozmax = i;
        }
    fout << maxim << '\n';
    fout << a[pozmax];
    while(urm[pozmax] != -1)
    {
        pozmax = urm[pozmax];
        fout << ' ' << a[pozmax];
    }
    fout <<'\n';
    fout.close();
    return 0;
}