Cod sursa(job #483253)

Utilizator elmercerAlex Mercer elmercer Data 7 septembrie 2010 17:27:13
Problema Subsir crescator maximal Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 0.85 kb
#include <stdio.h>
#include <math.h>

long n, din[100010], dex[100010], val, i, max;

long BSearch (long num) {
	long ll = 0, rl = dex[0], sol = 0;
	
	while (ll < rl) {
		long mid = (ll + rl) / 2 + 1;
		if (dex[mid] >= num) {
			rl = mid - 1;
		} else {
			ll = mid;
			sol = mid;
		}
	}
	
	return sol;
}

int main() {
	freopen("scmax.in", "r", stdin);
	freopen("scmax.out", "w", stdout);
	
	scanf("%ld", &n);
	din[0] = 1;
	din[1] = 1;
	for (i = 1; i <= n; ++i) {
		scanf("%ld", &val);
		if (i == 1) {
			dex[0] = 1;
			dex[1] = val;
			continue;
		}
		
		din[i] = BSearch(val) + 1;
		if (dex[din[i]] == 0) { ++dex[0]; dex[din[i]] = 2000000010; }
		if (dex[din[i]] > val) { 
			dex[din[i]] = val;
		}
	}
	
	max = 0;
	for (i = 1; i <= n; ++i) {
		if (max < din[i]) max = din[i];
	}
	
	printf("%ld", max);
	
	return 0;
}