Cod sursa(job #299505)

Utilizator AndreiDDiaconeasa Andrei AndreiD Data 6 aprilie 2009 20:19:47
Problema Secv Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.78 kb
#include <cstdio>
#include <algorithm>

using namespace std;

#define Nmax 5011

int v[Nmax],best[Nmax],poz[Nmax],p,n,lmax;

void citire()
{
	int i,j;
	freopen("secv.in","r",stdin);
	freopen("secv.out","w",stdout);
	
	scanf("%d", &n);
	for (i=1;i<=n;++i)
		 scanf("%d", &v[i]);
}

void dinamica()
{
	int i,j;
	best[n]=1;
	poz[n]=-1;
	p=n;
	lmax=0;
	for (i=n-1;i>=1;--i)
	{
		best[i]=1;
		poz[i]=-1;
		for (j=i+1;j<=n;++j)
			 if (v[i]<v[j] && best[j]+1>best[i])
			 {
				 best[i]=best[j]+1;
				 if (best[i]>lmax)
					  lmax=best[i],p=i;
				 poz[i]=j;
			 }
	}
}

void solve()
{
	int i,j,nr;
	i=p;
	while(i!=-1)
	{
		nr=i;
		i=poz[i];
	}
	nr=nr-p+1;
	printf("%d", nr);
}

int main()
{
	citire();
	dinamica();
	solve();
	return 0;
}