Cod sursa(job #2170947)

Utilizator hitmannCiocas Radu hitmann Data 15 martie 2018 10:30:05
Problema Subsir crescator maximal Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.32 kb
#include <iostream>
#include <fstream>

using namespace std;

int main()
{
    uint32_t* sir;
    int16_t n, i, j, *best, *previous;

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

    fin >> n;

    sir = new uint32_t[n];
    best = new int16_t[n];
    previous = new int16_t[n];

    for(i = 0; i < n; i++)
    {
        fin >> sir[i];
    }

    best[0] = 1;
    previous[0] = -1;

    uint16_t maxSubsir = best[0], poz = 0;

    for (i = 1; i < n; i++)
    {
        best[i] = 0;

        for (j = 0; j < i; j++)
        {
            if ((best[j] >= best[i]) && (sir[j] < sir[i]))
            {
                best[i] = best[j] + 1;
                previous[i] = j;
            }
        }

        if (best[i] == 0)
        {
            best[i] = 1;
            previous[i] = -1;
        }

        if (maxSubsir <= best[i])
        {
            maxSubsir = best[i];
            poz = i;
        }
    }

    fout << maxSubsir << endl;
    i = poz;
    uint32_t *subsirMaximal = new uint32_t[maxSubsir];
    j = maxSubsir - 1;

    do
    {
        subsirMaximal[j] = sir[i];
        j--;
        i = previous[i];
    }
    while (i != -1);

    for (i = 0; i < maxSubsir; i++)
    {
        fout << subsirMaximal[i] << " ";
    }

    return 0;
}