Cod sursa(job #218942)

Utilizator peanutzAndrei Homorodean peanutz Data 4 noiembrie 2008 10:33:21
Problema Subsir crescator maximal Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 0.84 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)
{
	int m, st = 1, dr = nr+1;
	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])
			st = m+1;
		else
			dr = m-1;
	}
	//for(int i = 1; i <= nr; ++i)
	//	printf("%d ", v[i]); printf("\n");
		
	return m;
}

int main()
{
	freopen("scmax.in", "r", stdin);
	freopen("scmax.out", "w", stdout);
	
	scanf("%d\n", &n);
	
	for(int i = 1; i <= n; ++i)
		scanf("%d ", &a[i]);
	
	a[0] = INFI;
	v[1] = 1;
	nr = 1;
	for(int crt, i = 2; i <= n; ++i)
	{
		crt = bs(i);
		//printf("m = %d\n", crt); continue;

		if(a[ v[crt] ] == INFI)
			++nr;
					
		v[crt] = i;
	}

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