Cod sursa(job #1246671)

Utilizator ducu34Albastroiu Radu Gabriel ducu34 Data 21 octombrie 2014 15:12:44
Problema Subsir crescator maximal Scor 65
Compilator cpp Status done
Runda Arhiva educationala Marime 0.82 kb
#include <fstream>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int i,n,j,x,MAX,v[100001],sir[100001],l[100001],k;
int caut(int st,int dr,int val)
{
	int mij=0;
	if(st==dr)
		return dr;
	mij=(st+dr)/2;
	if(val>sir[mij])
		return caut(mij+1,dr,val);
	else
		return caut(st,mij,val);
}
int main()
{
	fin>>n;
	for(i=1;i<=n;i++)
		fin>>v[i];
	l[1]=1;
	sir[1]=v[1];
	k=1;
	for(i=2;i<=n;i++)
	{
		if(v[i]>sir[k])
		{
			k++;
			sir[k]=v[i];
			l[i]=k;
		}
		else
		{
			x=caut(1,k,v[i]);
			l[i]=x;
			sir[x]=v[i];
		}
	}
	for(i=1;i<=n;i++)
	{
		if(l[i]>MAX)
		{
			MAX=l[i];
			j=i;
		}
	}
	fout<<MAX<<"\n";
	while(l[j]!=1)
		j--;
	k=1;
	for(i=j;i<=n;i++)
	{
		if(l[i]==k)
		{
			fout<<sir[l[i]]<<" ";
			if(k==MAX)
			break;
			k++;
		}
	}
	return 0;
}