Pagini recente » Cod sursa (job #3292451) | Cod sursa (job #3243759) | Istoria paginii runda/cnmnarad | Cod sursa (job #3223007) | Cod sursa (job #2170947)
#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;
}