Cod sursa(job #1815174)

Utilizator PaulTPaul Tirlisan PaulT Data 24 noiembrie 2016 21:47:22
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.75 kb
#include <fstream>
using namespace std;

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

const int dim = 100100;
int n, poz, l, a[dim], v[dim], p[dim], h[dim];

int BS(int x);

int main()
{
	fin >> n;
	for (int i = 1; i <= n; i++)
	{
		fin >> a[i];
		poz = BS(a[i]);
		if ( poz > l )
			l++;
		v[poz] = a[i];
		p[i] = poz;
	}
	fout << l << '\n';
	poz = l;
	for (int i = n; i; i--)
		if ( p[i] == poz )
		{
			h[poz] = a[i];
			poz--;
		}
	for (int i = 1; i <= l; i++)
		fout << h[i] << ' ';
	
	fin.close();
	fout.close();
	return 0;
}

int BS(int x)
{
	int left = 1, right = l, mid, sol = l + 1;
	while ( left <= right )
	{
		mid = (left + right) / 2;
		if ( x <= v[mid] )
		{
			sol = mid;
			right = mid - 1;
		}
		else
			left = mid + 1;
	}
	return sol;
}