Cod sursa(job #1514619)

Utilizator meriniucrMeriniuc Razvan- Dumitru meriniucr Data 31 octombrie 2015 12:58:04
Problema Subsir crescator maximal Scor 55
Compilator cpp Status done
Runda Arhiva educationala Marime 0.95 kb
#include <fstream>
#include <iostream>

const int MAXN = 1000000;

using namespace std;

int N;
int v[2000];
int seq[2000];
int sequence;
int subseq;
int s[MAXN];
int r[MAXN];

int		find_position(int el)
{
	int temp;
	int index;

	for (temp = 1; temp <= sequence; temp <<= 1);
	for (index = 0; temp; temp >>= 1)
		if (index + temp <= sequence and v[index + temp] < el)
				index += temp;
	return index;
}

int		insert_element(int el)
{
	int pos;

	pos = find_position(el);
	if (el == v[pos + 1])
		return -1;
	v[pos + 1] = el;
	if (not pos)
		seq[pos + 1] = ++subseq;
	else
		seq[pos + 1] = seq[pos];
	if (pos == sequence)
		++sequence;
	return pos + 1;
}

int		main()
{
	ifstream mama("scmax.in");
	ofstream tata("scmax.out");

	mama >> N;
	seq[0] = 1;
	for (int x, i = 0; i < N; i += 1)
	{
		mama >> r[i];
		x = insert_element(r[i]);
		if (x != -1)
			s[i] = seq[x];
	}
	tata << sequence << '\n';
	for (int i = 1; i <= sequence; i += 1)
		tata << v[i] << " ";
	return 0;
}