Cod sursa(job #1254324)

Utilizator dr_personalityEftime Andrei Horatiu dr_personality Data 2 noiembrie 2014 15:47:07
Problema Subsir crescator maximal Scor 65
Compilator cpp Status done
Runda Arhiva educationala Marime 0.96 kb
#include<fstream>
using namespace std;
ifstream in("scmax.in");
ofstream out("scmax.out");

const int nmax = 100006;
int n, v[nmax], d[nmax], best[nmax], lbest = 1;

int bs(int x)
{
	int hi = lbest, lo = 0, mid = 0;
	while(hi - lo>1)
	{
		mid = (hi + lo) / 2;

		if(v[best[mid]]>=x && x>v[best[mid - 1]])
			return mid;

		if(v[best[mid]]>=x)
			hi = mid;
		else
			lo = mid;
	}

	if(v[best[mid]]>=x && x>v[best[mid - 1]])
			return mid;
	if(v[best[lo]]>=x && x>v[best[lo - 1]])
			return lo;
	if(v[best[hi]]>=x && x>v[best[hi - 1]])
			return hi;

	return  -1;
}

int main(){
	int player_unu=0;

	in>>n;
	for(int i = 1; i<=n; i++)
	{
		in>>v[i];

		int aux = bs(v[i]);

		if(aux==-1)
		{
			d[i] = d[best[lbest - 1]];
			best[lbest] = i;
			lbest++;
		}
		else
		{
			d[i] = d[best[aux]];
			best[aux] = i;
		}
	}

	out<<lbest - 1<<'\n';
	for(int i = 1; i<=lbest - 1; i++)
		out<<v[best[i]]<<' ';

	return player_unu;
}