Cod sursa(job #536026)

Utilizator mariusandreiMarius Lucian Andrei mariusandrei Data 18 februarie 2011 01:21:16
Problema Subsir crescator maximal Scor 5
Compilator cpp Status done
Runda Arhiva educationala Marime 0.91 kb
#include<stdio.h>
#define N 100001
using namespace std;
int v[N], minim;
int best[N];
int l[N],nr;
int sol[N];
int maxim;
int n,poz;
void citire()
{
	freopen("scmax.in","r",stdin);
	freopen("scmax.out","w",stdout);
	scanf("%d",&n);
	for (int i=1;i<=n;i++)
		scanf("%d",&v[i]);
}

int caut(int k)
{
	int p=0,u=nr;
	int m=(p+u)/2;
	while(p<=u)
	{
		if(v[l[m]]<k && k <= v[l[m+1]]) 
			return m;
		else
			if(v[l[m+1]] > k)
			{
				p=m+1;
				m=(p+1)/2;
			}
			else
			{
				u=m-1;
				m=(p+1)/2;
			}
			
	}
	return nr;
}
void vector()
{
	nr=1;
	sol[1]=1;
	l[1]=1;
	l[0]=0;
	for(int i=2;i<=n;i++)
	{
		poz=caut(v[i]);
		sol[i]=l[poz];
		best[i]=poz+1;
		l[poz+1]=i;
		if(nr<poz+1)
			nr=poz+1;
	}
	poz=0;
	for(int i=1;i<=n;i++)
		if(maxim<best[i])
		{
			maxim=best[i];
			poz=i;
		}
		printf("%d\n",maxim);
}
int main()
{
	citire();
	vector();
	return 0;
}