Cod sursa(job #447694)

Utilizator darrenRares Buhai darren Data 30 aprilie 2010 15:14:35
Problema Subsir crescator maximal Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.77 kb
#include<fstream>
#include<limits>
using namespace std;

const int SIZE = 100000;

void read();
void write();
void doit();

int n, a[SIZE], b[SIZE];
int mx = INT_MIN;

int main()
{
	read();
	doit();
	write();
	return 0;
}

void read()
{
	ifstream fin( "scmax.in" );
	fin >> n;
	for ( int i = 0; i < n; ++i )
		fin >> a[i];
	fin.close();
}

void write()
{
	ofstream fout( "scmax.out" );
	fout << mx;
	fout.close();
}

void doit()
{
	int i, k = 0;
	b[0] = a[0];
	for ( i = 1; i < n; ++i )
		if ( a[i] > b[k] )
			b[++k] = i;
		else
		{
			int p1 = 0, p2 = k;
			while ( p1 <= p2 )
			{
				int mid = ( p1 + p2 ) >> 1;
				if ( b[mid] > a[i] )
					p2 = mid - 1;
				else
					p1 = mid + 1;
			}
			b[p1] = a[i];
		}
	mx = k;
}