Pagini recente » Cod sursa (job #2738649) | Cod sursa (job #3291737) | Cod sursa (job #1344334) | Cod sursa (job #1532630) | Cod sursa (job #2050569)
#include <fstream>
#define maxim(a, b) a > b ? a : b
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
void citire();
void dinamica();
int n;
int v[100005], lg[100005];
int main()
{
citire();
dinamica();
return 0;
}
void dinamica()
{
int maxx = 1, pozmax = n;
lg[n] = 1;
for (int i = n - 1; i; i--)
for (int j = i + 1; j <= n; j++)
{
if (v[i] < v[j])
{
lg[i] = maxim(1 + lg[j], lg[i]);
if (lg[i] > maxx)
{
maxx = lg[i];
pozmax = i;
}
}
else
{
lg[i] = 1;
if (lg[i] > maxx)
{
maxx = lg[i];
pozmax = i;
}
}
}
fout << maxx << '\n';
for (int i = pozmax; i <= n && maxx; i++)
if (lg[i] == maxx)
{
maxx--;
fout << v[i] << ' ';
}
}
void citire()
{
fin >> n;
for (int i = 1; i <= n; i++)
fin >> v[i];
}