Cod sursa(job #2190864)

Utilizator AlexnolifeAlexandru Ica Alexnolife Data 31 martie 2018 21:37:20
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.92 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]);
//}

#include <iostream>
#include <fstream>
#define MAX 100002

using namespace std;

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

int n, previous[MAX], v[MAX], q[MAX], l;

void print(int pos)
{
	if (pos)
	{
		print(previous[pos]);
		g << v[pos] << ' ';
	}
}

int main()
{
	int st, dr, mid, pos;
	f >> n;
	f >> v[1];
	q[1] = 1;
	previous[1] = 0;
	l = 1;

	for (int i = 2; i <= n; ++i)
	{
		f >> v[i];
		st = 0;
		dr = l;
		pos = -1;
		while (st <= dr)
		{
			int mid = (st + dr) / 2;
			if (v[q[mid]] >= v[i])
			{
				dr = mid - 1;
			}
			else
			{
				pos = mid;
				st = mid + 1;
			}
		}

		q[pos + 1] = i;
		previous[i] = q[pos];

		if (pos + 1 > l)
			l = pos + 1;
	}

	g << l << '\n';

	print(q[l]);

	return 0;
}