Pagini recente » Cod sursa (job #2626899) | Cod sursa (job #429210) | Cod sursa (job #3202618) | Cod sursa (job #3277767) | Cod sursa (job #2268797)
#include <fstream>
#include <vector>
#include <stack>
using namespace std;
ifstream in("scmax.in");
ofstream out("scmax.out");
int main()
{
int n, start, maxim = 0;
in >> n;
stack<int> stk;
vector<int> v(n + 1);
vector<int> best(n + 1);
vector<int> next(n + 1);
for (int i = 1; i <= n; i++)
{
in >> v[i];
best[i] = 1;
for (int j = i - 1; j >= 1; j--)
if (v[j] < v[i] && best[j] + 1 > best[i])
{
best[i] = best[j] + 1;
next[i] = j;
if (best[i] > maxim)
{
maxim = best[i];
start = i;
}
}
}
out << maxim << '\n';
while (start)
{
stk.push(start);
start = next[start];
}
while (!stk.empty())
{
out << v[stk.top()] << ' ';
stk.pop();
}
return 0;
}