Cod sursa(job #1330243)

Utilizator andrei_diaconuAndrei Diaconu andrei_diaconu Data 30 ianuarie 2015 15:27:31
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.75 kb
#include <fstream>
#define NMax 100001
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
int n, v[NMax], i, l, mid, r, stack[NMax], rec[NMax], ini[NMax], ind, lscm;
int main()
{
	f >> n;
	for (i = 1; i <= n; i++)
		f >> v[i];
	for (i = 1; i <= n; i++) {
		l = 1;
		r = lscm;
		while (l <= r) {
			mid = (l + r) / 2;
			if (stack[mid] < v[i])
				l = mid + 1;
			else {
				r = mid - 1;
				ind = mid;
			}
		}
		if (v[i] > stack[lscm]) {
			stack[++lscm] = v[i];
			rec[i] = lscm;
		}
		else {
			stack[ind] = v[i];
			rec[i] = ind;
		}
	}
	g << lscm << "\n";
	int len = lscm;
	for (i = n; i >= 1; i--) {
		if (rec[i] == len)
			ini[len--] = v[i];
	}
	for (i = 1; i <= lscm; i++)
		g << ini[i] << " ";
}