Cod sursa(job #2190853)

Utilizator AlexnolifeAlexandru Ica Alexnolife Data 31 martie 2018 21:11:52
Problema Subsir crescator maximal Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.03 kb
#include <fstream>
#include <vector>
#include <limits>

std::ifstream f("scmax.in");
std::ofstream g("scmax.out");

constexpr int MAX = 100001;
int n, length;

std::vector<int> v(MAX);
std::vector<int> q(MAX, std::numeric_limits<int>::max());
std::vector<int> prevPos(MAX, -1);
std::vector<int> pos(MAX);

int Search(int n, int val)
{   
	/**************************/
	/*  TODO: BINARY SEARCH   */
	/**************************/
	for (int i = 0; i <= n; ++i) {
		if (q[i] >= val) {
			return i;
		}
	}
}

void Read()
{
	f >> n;

	length = 0;

	for (int i = 0; i < n; ++i) {
		f >> v[i];

		int index = Search(length, v[i]);
		
		q[index] = v[i];
		pos[index] = i;
		prevPos[i] = (index == 0) ? -1 : pos[index - 1];

		if (index > length) {
			length = index;
		}
	}
	
	g << length + 1 << '\n';
}

void PrintSol(int i)
{
	if (prevPos[i] == -1) {
		g << v[i] << ' ';
	}
	else {
		PrintSol(prevPos[i]);
		g << v[i] << ' ';
	}
}

int main(int, char *[])
{
	Read();
	PrintSol(pos[length]);
}