Cod sursa(job #2529170)

Utilizator mirceamaierean41Mircea Maierean mirceamaierean41 Data 23 ianuarie 2020 00:47:37
Problema Subsir crescator maximal Scor 30
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.76 kb
#include <fstream>
#include <stack>
#include <algorithm>
using namespace std;

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

const int NMAX = 100001;
const int oo = 1e9;

int a[NMAX], b[NMAX], d[NMAX];

stack <int> st;

void lis(int n)
{
	int maxi = 0;

	for (int i = 1; i <= n; ++i)
	{
		d[i] = lower_bound(b + 1, b + n + 1, a[i]) - b;
		if (d[i] > maxi) maxi = d[i];
		b[d[i]] = a[i];
	}

	fout << maxi << "\n";

	for (int i = n; i; --i)
		if (d[i] == maxi)
		{
			st.push(a[i]);
			maxi--;
		}

	while (!st.empty())
	{
		fout << st.top() << " ";
		st.pop();
	}

	fout << "\n";

}
int main()
{
	int n;

	fin >> n;
	for (int i = 1; i <= n; ++i)
	{
		fin >> a[i];
		b[i] = oo;
		d[i] = 0;
	}

	lis(n);

	return 0;
}