Cod sursa(job #3174473)

Utilizator laurentiu.maticaMatica Laurentiu-Andrei laurentiu.matica Data 24 noiembrie 2023 19:51:25
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.84 kb
#include <fstream>
#include <stack>
using namespace std;
ifstream cin("scmax.in");
ofstream cout("scmax.out");
int l[100001], poz[100001], x[100001];
int n, m;
void print(int l, int i)
{
	if (i == 0)
		return;
	else
	{
		if (poz[i] == l)
		{
			print(l - 1, i - 1);
			cout << x[i] << ' ';
		}
		else
			print(l, i - 1);
	}
}
int main()
{
	cin >> n;
	int len = 1;
	for (int i = 1; i <= n; i++)
		cin >> x[i];
	poz[1] = 1;
	l[len] = x[1];
	for (int i = 2; i <= n; i++)
	{
		if (x[i] > l[len])
		{
			poz[i] = len + 1;
			l[++len] = x[i];
		}
		else
		{
			int st = 1, dr = len;
			int ow;
			while (st <= dr)
			{
				int mid = (st + dr) / 2;
				if (l[mid] >= x[i])
					dr = mid - 1;
				else
					st = mid + 1;
			}
			poz[i] = st;
			l[st] = x[i];
		}
	}
	cout << len << '\n';
	print(len, n);
	return 0;
}