Cod sursa(job #855497)

Utilizator deea101Andreea deea101 Data 15 ianuarie 2013 00:07:50
Problema Subsir crescator maximal Scor 65
Compilator cpp Status done
Runda Arhiva educationala Marime 0.65 kb
#include <fstream>
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
int a[100001],b[100001],m[100001],n;
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;
}
		
int main()
{
	int i,j,l=1;
	f>>n;
	m[1]=1;
	for(i=1;i<=n;i++)
		f>>a[i];
	for(i=1;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;
	}
	g<<l<<endl;
	for(i=1;i<=l;i++)
		g<<a[m[i]]<<' ';
}