Pagini recente » Cod sursa (job #2171460) | Cod sursa (job #620048) | Cod sursa (job #3241654) | Cod sursa (job #3209195) | Cod sursa (job #2965461)
//#include <iostream>
#include <fstream>
#include <stack>
using namespace std;
const int NMAX = 1e5 + 1;
int LIS[NMAX], ant[NMAX], n, v[NMAX], maxim, poz;
int main()
{
ifstream cin("scmax.in");
ofstream cout("scmax.out");
cin >> n;
for (int i = 1; i <= n; i++)
{
cin >> v[i];
LIS[i] = 1;
}
for (int i = 1; i <= n; i++)
{
for (int j = i + 1; j <= n; j++)
{
if (v[j] > v[i])
{
if (LIS[j] < LIS[i] + 1)
{
LIS[j] = LIS[i] + 1;
ant[j] = i;
if (LIS[j] > maxim)
{
maxim = LIS[j], poz = j;
}
}
}
}
}
cout << maxim << '\n';
stack <int> af;
while (ant[poz] != 0)
{
af.push(v[poz]);
poz = ant[poz];
}
af.push(v[poz]);
while (!af.empty())
{
cout << af.top() << ' ';
af.pop();
}
}