Cod sursa(job #863201)

Utilizator predatorGigi Valoare predator Data 23 ianuarie 2013 16:27:58
Problema Subsir crescator maximal Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.8 kb
#include <fstream>
using namespace std;

ifstream f ("scmax.in");
ofstream g ("scmax.out");
int i,k,m,poz,n,st,d,ma,v[100001],sol[100001],l[100001],s[100001];
int main ()
{
	f>>n;
	for (i=1;i<=n;i++)
		f>>v[i];
	s[1]=v[1];
	l[1]=1;
	k=1;
	for (i=2;i<=n;i++)
	{ 
		if (v[i]>s[k])
			{s[++k]=v[i];l[i]=k;}
		else
		{ st=1;d=k;
		  while (st<=d)
		  { m=(st+d)/2;
		  if(v[i]<s[m+1]&&v[i]>=s[m])
			 { poz=m;
			  break;
			 }
		  else
			  if(v[i]<s[m])
				d=m-1;
			  else
			   st=m+1;
		  }
		  if(!poz)
			poz=1;  
		  s[poz]=v[i];
		  l[i]=poz;
		}
	}
	ma=0;
    for (i=1;i<=n;i++)
		
    if (ma<l[i])
        {ma=l[i];poz=i;}
	g<<ma<<'\n';
	k=0;
    for (i=poz;ma!=0;i--)
	if (l[i]==ma)
		{sol[++k]=v[i];ma--;}
	for(i=k;i>=1;--i)
		g<<sol[i]<<" ";
	return 0;
}