Cod sursa(job #750456)

Utilizator stanescu_teodorStanescu Teodor stanescu_teodor Data 22 mai 2012 10:15:49
Problema Subsir crescator maximal Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.82 kb
#include <fstream>
#define inf 99999999
using namespace std;
ifstream f ("scmax.in");
ofstream g ("scmax.out");
int a[1000],Q[1000],p[1000],mx,pz,l,u,n,i;

int cb (int x,int Q[],int st,int dr)
{
	int mij,pz;
	pz=0;
	while (st<=dr && !pz)
	{
		mij=(st+dr)/2;
		if (Q[mij]==x) pz=mij;
		else
			if (Q[mij]>x) dr=mij-1;
		else st=mij+1;
	}
	if (!pz) 
	{
		pz=st;
		if (st>l) l++;
	}
	Q[pz]=x;
	return pz;
}

void scriere (int u,int i,int lg)
{
	if (i>0)
	{
		if (a[i]<u && p[i]==lg)
		{
			scriere (a[i],i-1,lg-1);
			g<<a[i]<<' ';
		}
		else scriere (u
			,i-1,lg);
	}
}

int main ()
{
	f>>n;
	for (i=1; i<=n; i++)
		f >>a[i];
	l=1; Q[1]=a[1];
	for (i=2; i<=n; i++)
	{
		p[i]=cb(a[i],Q,1,l);
		if (l>mx)
		{
			mx=l;
			pz=i;			
		}
	}
	u=inf;
	scriere (u,pz,mx);
	return 0;
}