Cod sursa(job #218879)

Utilizator peanutzAndrei Homorodean peanutz Data 3 noiembrie 2008 21:12:08
Problema Subsir crescator maximal Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.79 kb
#include <stdio.h>

#define NMAX 100010
#define INFI 0x3f3f3f3f

int a[NMAX];
int v[NMAX];
int max;
int n;
int nr;

int bs(int x)
{
	if(a[ v[nr] ] < a[x])
	{
		v[++nr] = x;
		v[nr+1] = INFI;
		return nr;
	}
	int m, st = 1, dr = nr;
	while(st <= dr)
	{
		m = (st+dr) >> 1;
		if(a[ v[m] ] <= a[x] && a[ v[m+1] ] > a[x])
			return m;
		else if(a[ v[m] ] > a[x])
			dr = m-1;
		else
			st = m+1;
	}
	return nr-m+1;
}

int main()
{
	freopen("cmlsc.in", "r", stdin);
	freopen("cmlsc.out", "w", stdout);
	
	scanf("%d\n", &n);
	
	for(int i = 1; i <= n; ++i)
		scanf("%d ", &a[i]);
		
	v[1] = 1;
	nr = 1;
	v[nr+1] = INFI;
	for(int crt, i = 2; i <= n; ++i)
	{
		crt = bs(i);
		if(max < crt)
			max = crt;
	}

	printf("%d\n", max);
	
	return 0;
}