Cod sursa(job #410850)

Utilizator ProcopliucProcopliuc Adrian Procopliuc Data 4 martie 2010 17:02:20
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.74 kb
# include <fstream.h>
ifstream f ("scmax.in");
ofstream g ("scmax.out");
int a[100005],s[100005],i,j,poz,n,m,x,k,l[100005];
 
  void caut (int i,int j)
  {
	  int mij=(i+j)/2;

	  
	  if (s[mij]>=x && s[mij-1]<x)
	  
		  poz=mij;
	  
	  else
		  if (s[mij]>x)
			  caut (i,mij-1);
		  else
			  caut (mij+1,j);
  }
		  


int main ()
{
	f>>n;
	for (i=1;i<=n;i++)
		f>>a[i];
	
	s[1]=a[1];
	m=1;
	l[1]=1;
	for (i=2;i<=n;i++)
	{
		x=a[i];
		if (s[m]<x)
		{
			m++;
			s[m]=x;
			l[i]=m;
		}
		else
		{
		caut (1,m);
		s[poz]=x;
		l[i]=poz;
		}
	}
	g<<m<<"\n";
 k=0;
 x=m;
 for (i=n;i>=1;i--)
 {
	 if (l[i]==x)
	{	 k++;
	 s[k]=i;
	x--;
	}
 }
 for (i=m;i>=1;i--)
	 g<<a[s[i]]<<" ";
	 
	
	return 0;
}