Cod sursa(job #1720293)

Utilizator LegionHagiu Stefan Legion Data 21 iunie 2016 22:27:25
Problema Subsir crescator maximal Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <cstdlib>
using namespace std;
int n;
int a[100001];
int c[100001];
vector<int> b;
int min(int a, int b)
{
	if (a <= b){ return a; }
	return b;
}
int main()
{
	ifstream in("scmax.in");
	ofstream out("scmax.out");
	int i,x,y,mid,d=1,z,e;
	in >> n;
	for (i = 1; i <= n; i++)
	{
		in >> a[i];
	}
	b.push_back(a[1]);
	c[1] = b.size();
	for (i = 2; i <= n; i++)
	{
		x = 0;
		y = b.size() - 1;
		z = -1;
		while (x <= y)
		{
			mid = (x + y) / 2;
			if (b[mid] >= a[i])
			{
				z = mid;
				y = mid - 1;
				continue;
			}
			else
			{
				x = mid + 1;
			}
		}
		if (z == -1)
		{
			b.push_back(a[i]);
			c[i] = b.size();
		}
		else
		{
			b[z] = a[i];
			c[i] = z + 1;
		}
	}
	out << b.size() << "\n";
	e = a[1];
	for (i = 2; i <= n; i++)
	{
		if (c[i] == d)
		{
			e = min(a[i],e);
		}
		else if (c[i] == d + 1)
		{
			out << e<<" ";
			d++;
			e = a[i];
		}
	}
	out << e;
}