Cod sursa(job #2097048)

Utilizator dragos.galeteanu2001Dragos Iulian dragos.galeteanu2001 Data 30 decembrie 2017 14:02:00
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.83 kb
#include <fstream>
#define limit 100005

using namespace std;

ifstream f("scmax.in");
ofstream g("scmax.out");

int n, v[limit], secv[limit], length[limit], lg, lg2;

int main()
{
	int i, lt, rt, mid, nr;
	f >> n;
	for (i = 1; i <= n; i++) f >> v[i];

	for (i = 1; i <= n; i++) {
		if (v[i] > secv[lg]) {
			secv[++lg] = v[i];
			length[i] = lg;
		}
		else {
			for (lt = 1, rt = lg, lg2 = lg; lt <= rt;) {
				mid = (lt + rt) / 2;
				if (secv[mid] < v[i]) lt = mid + 1;
				else {
					lg2 = mid;
					rt = mid - 1;
				}
			}
			secv[lg2] = v[i];
			length[i] = lg2;
		}
	}

	g << lg << '\n';

	for (i = n, lg2 = 0; i >= 1 && lg >= 1; i--)
		if (length[i] == lg) {
			secv[++lg2] = v[i];
			lg--;
		}

	for (i = lg2; i >= 1; i--) g << secv[i] << ' ';

	f.close();
	g.close();
    return 0;
}