Cod sursa(job #2857820)

Utilizator IanisOpritescuOpritescu Ianis IanisOpritescu Data 26 februarie 2022 13:28:17
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.82 kb
#include <iostream>
#include <fstream>

using namespace std;

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

const int N = 100001;
int n, k;
int a[N];
int l[N];
int sol[N];

int main()
{
	fin >> n;
	for (int i = 1; i <= n; i++)
		fin >> a[i];

	k = 0;
	sol[0] = 0;
	for (int i = 1; i <= n; i++)
	{
		if (a[i] > sol[k])
			sol[++k] = a[i], l[i] = k;
		else
		{
			int st = 1, dr = k, mij, poz = k;
			while (st <= dr)
			{
				mij = (st + dr) / 2;
				if (a[i] <= sol[mij])
				{
					poz = mij;
					dr = mij - 1;
				}
				else
					st = mij + 1;
			}

			sol[poz] = a[i];
			l[i] = poz;
		}
	}
	fout << k << "\n";

	int j = 0;
	for (int i = n; i > 0 && k > 0; i--)
		if (l[i] == k)
			sol[++j] = a[i], k--;

	for (int i = j; i > 0; i--)
		fout << sol[i] << " ";

	return 0;
}