Cod sursa(job #3230139)

Utilizator 0021592Grecu rares 0021592 Data 19 mai 2024 13:09:46
Problema Subsir crescator maximal Scor 20
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.76 kb
#include <fstream>
#include <algorithm>
using namespace std;
ifstream in("scmax.in");
ofstream out("scmax.out");
int n, v[100010], p[100010], best[100010], lg, i, j, lgaux, mx;
int main()
{
	in >> n;
	for (i = 1; i <= n; i++)
	{
		in >> v[i];
		if (lg == 0)
		{
			best[++lg] = v[i];
			p[i] = 1;
			mx = max(mx, 1);
			continue;
		}
		lgaux = upper_bound(best + 1, best + 1 + lg, v[i])-best;
		if (v[i] == 15)
			int grecu = 1;
		while (best[lgaux - 1] == v[i] && lgaux - 1 >= 1)
			lgaux--;
		best[lgaux] = v[i];
		lg = lgaux;
		p[i] = lg;
		mx = max(mx, lg);
	}
	out << mx << '\n';
	for (i = n; i >= 1; i--)
		if (p[i] == mx)
		{
			p[i] = -1;
			mx--;
		}
	for (i = 1; i <= n; i++)
		if (p[i] == -1)
			out << v[i] << ' ';
	return 0;
}