Cod sursa(job #855502)

Utilizator deea101Andreea deea101 Data 15 ianuarie 2013 00:17:13
Problema Subsir crescator maximal Scor 95
Compilator cpp Status done
Runda Arhiva educationala Marime 0.73 kb
#include <fstream>
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
int a[100001],b[100001],m[100001],p[100001],n,l=1;
int cautare(int st,int dr,int i)
{
	if(st<=dr && st && dr)
	{
		int mij,x;
		mij=(st+dr)/2;
		if(a[m[mij]]>=a[i]) return cautare(st,mij-1,i);
		else 
			{
				x=cautare(mij+1,dr,i);
				if(x) return x;
				else return mij;
		}
	}
	else return 0;
}
void solutie(int k)
{
	if(k>1)
	{
		solutie(p[k]);
		g<<a[k]<<' ';
	}
}
int main()
{
	int i,j;
	f>>n;
	m[1]=1;
	for(i=1;i<=n;i++)
		f>>a[i];
	p[1]=0;
	for(i=2;i<=n;i++)
	{
		j=cautare(1,l,i);
		b[i]=j+1;
		if(b[i]>l) l=b[i];
		if(a[m[j+1]]>a[i] || !m[j+1]) m[j+1]=i;
		p[i]=m[j];
	}
	g<<l<<endl;
	solutie(m[l]);
}