Cod sursa(job #1379200)

Utilizator andrei_diaconuAndrei Diaconu andrei_diaconu Data 6 martie 2015 16:59:09
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.76 kb
#include <fstream>
#define NMax 100010
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
int n, v[NMax], st, mid, dr, stack[NMax], pos[NMax], lsc, rec[NMax];
int main()
{
	f >> n;
	for (int i = 1; i <= n; i++)
		f >> v[i];
	for (int i = 1; i <= n; i++) {
		st = 1; 
		dr = lsc;
		int ind;
		while (st <= dr) {
			mid = (st + dr) / 2;
			if (stack[mid] < v[i])
				st = mid + 1;
			else {
				dr = mid - 1;
				ind = mid;
			}
		}
		if (stack[lsc] < v[i]) {
			stack[++lsc] = v[i];
			pos[i] = lsc;
		}
		else {
			stack[ind] = v[i];
			pos[i] = ind;
		}
	}
	g << lsc << "\n";
	int tmp = lsc;
	for (int i = n; i >= 1; i--)
		if (pos[i] == lsc)
			rec[lsc--] = v[i];
	for (int i = 1; i <= tmp; i++)
		g << rec[i] << " ";
}