Cod sursa(job #3239000)

Utilizator ridicheTudor Diaconu ridiche Data 1 august 2024 11:53:15
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.79 kb
#include <fstream>
#include <vector>
#include <stack>

using namespace std;

ifstream in;
ofstream out;

int n, a[100005], pos[100005]; vector<int> v; stack<int> s;

int main()
{
	in.open("scmax.in");
	out.open("scmax.out");
	in >> n;
	for (int i = 0; i < n; i++)
	{
		in >> a[i];
	}
	v.push_back(a[0]);
	pos[0] = 0;
	for (int i = 1; i < n; i++)
	{
		if (v.back() < a[i])
		{
			pos[i] = v.size();
			v.push_back(a[i]);
		}
		else
		{
			auto it = lower_bound(v.begin(), v.end(), a[i]);
			int p = it - v.begin();
			pos[i] = p;
			v[p] = a[i];
		}
	}
	out << v.size() << "\n";
	int cp = v.size() - 1;
	for (int i = n-1; i >= 0; i--)
	{
		if (pos[i] == cp)
		{
			s.push(a[i]);
			cp--;
		}
	}
	while (s.size())
	{
		out << s.top() << " ";
		s.pop();
	}
}