Cod sursa(job #1756776)

Utilizator theodor.moroianuTheodor Moroianu theodor.moroianu Data 13 septembrie 2016 17:18:38
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.75 kb
#include <fstream>
using namespace std;

int v[100010], c = 1;
int nr[100010];
int prec[100010];
int val[100010];
int poz(int n);

int main()
{
	ifstream in("scmax.in");
	int n, cit;
	nr[0] = -1;
	in >> n;
	for (int i = 1; i <= n; i++) {
		in >> val[i];
		cit = poz(val[i]);
		nr[cit] = i;
		v[cit] = val[i];
		prec[i] = nr[cit - 1];
	}
	ofstream out("scmax.out");
	out << c - 1 << '\n';
	int r[100010], cont = 0;
	int k = nr[c - 1];
	while (k != -1) {
		r[cont++] = val[k];
		k = prec[k];
	}
	for (int i = cont - 1; i >= 0; i--)
		out << r[i] << ' ';
	return 0;
}

int poz(int n)
{
	int p = 0, q = (1 << 20);
	while (q > 0) {
		if (p + q < c && v[p + q] < n)
			p += q;
		q /= 2;
	}
	p++;
	if (p == c)
		c++;
	return p;
}