Cod sursa(job #571089)

Utilizator nicknameLare Nicu nickname Data 3 aprilie 2011 23:36:39
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.6 kb
#include<fstream>
using namespace std;
fstream f1, f2;

int a[100001], b[100001], c[100001], n;
int i, lmax, lc;

int bs(int b[100001], int l, int h, int v)
{
int p;
while (l<=h)
{
	p=(l+h)/2;
	if (v<a[b[p]])l=p+1;
	else h=p-1;
}
return l;
}

int main()
{
	f1.open("scmax.in",ios::in);
	f2.open("scmax.out",ios::out);
	f1>>n;
	for (i=1;i<=n;i++) f1>>a[i];
	lmax=0;b[0]=0;
	for (i=n;i>=1;i--)
	{
	lc=bs(b,1,lmax,a[i]);
	c[i]=b[lc-1];
	if (lc>lmax){lmax=lc; b[lmax]=i;}
	else if (a[b[lc]]<a[i])b[lc]=i;
	}
	f2<<lmax<<"\n";
	for (i=b[lmax];i!=0;i=c[i])
	{
		f2<<a[i]<<" ";
	}
	f1.close();
	f2.close();
	return 0;
}