Cod sursa(job #403496)

Utilizator TabaraTabara Mihai Tabara Data 24 februarie 2010 23:32:02
Problema Subsir crescator maximal Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 0.63 kb
#include <fstream>
using namespace std;

const char* in = "scmax.in";
const char* out = "scmax.out";
const int NMAX = 100005;

int A[NMAX], P[NMAX], cnt;
int N;

int main( void )
{
	freopen ( in, "r", stdin );
	freopen ( out, "w", stdout );

	scanf ( "%d", &N );
	int i, bl, br, bm, last;
	for ( i = 1; i <= N; scanf("%d", A+i++ ) );

	for ( i = 1; i <= N; ++i )
	{
		if ( A[i] > P[cnt] )
			P[++cnt] = A[i];
		else
		{
			for ( bl = 1, br = cnt, last = cnt; bl <= br; )
			{
				bm = (bl+((br-bl)>>1));
				if ( P[bm] < A[i] ) bl = bm + 1;
				else last = bm, br = bm - 1;
			}
			P[last] = A[i];
		}
	}

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