Cod sursa(job #709450)

Utilizator ms-ninjacristescu liviu ms-ninja Data 8 martie 2012 09:30:13
Problema Subsir crescator maximal Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 0.85 kb
#include <fstream>
using namespace std;
#define dim 100005
#define inf 0x3f3f3f3f
int v[dim], best[dim], binar[dim],i;

int cautare(int nr, int ls, int ld)
{
	int mijloc;
	
		while(ls<=ld)
		{
			mijloc=(ls+ld)>>1;
			if(nr<binar[mijloc] && nr>binar[mijloc-1])
			{
				binar[mijloc]=nr;
				return best[mijloc];
			}
			else
				if(nr>binar[mijloc])
				{
					best[i]=max(best[i],best[mijloc]+1);
					ls=mijloc+1;
				}
				else
					ld=mijloc-1;
		}
	
}

int main()
{
	ifstream fin("scmax.in");
	ofstream fout("scmax.out");
	int n, m,  j, sf=0,valmaxim=0;
	
	fin>>n;
	
	for(i=1;i<=n;++i)
	{
		fin>>v[i];
		//binar[i]=inf;
		
		if(v[i]>binar[sf])
		{
		
			binar[++sf]=v[i];
			best[i]=sf;
		}
		else
			best[i]=cautare(v[i],1,sf);
		
		valmaxim=max(valmaxim,best[i]);
	}
	
	fout<<valmaxim;
	
	return 0;
}