Cod sursa(job #513110)

Utilizator the@EyE@Postavaru Stefan the@EyE@ Data 15 decembrie 2010 09:15:33
Problema Subsir crescator maximal Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.05 kb
#include <stdio.h>


long p[100000],q[10000],v[10000],ind=0,n,ras[10000],loc;

void insert(long nr,long st,long dr)
{
	if(st<=dr)
	{
		long mij=(dr+st)/2;
		if(mij==0&&q[0]>nr)
		{
			q[0]=nr;
			loc= 0;
		}
		else if(q[mij]<=nr&&q[mij+1]>nr)
		{
			q[mij+1]=nr;
			loc= mij+1;
		}
		else if(q[mij]>nr) insert(nr,st,mij);
		else insert(nr,mij,dr);
		
		
	}
	
}


int main()
{
	freopen("scmax.in","r",stdin);
	freopen("scmax.out","w",stdout);
	
	scanf("%ld\n",&n);
	for(int i=0;i<n;i++) 
	{
		scanf("%ld",&v[i]);
		int x=v[i];
		
		if(i==0)
		{
			q[0]=x;
			p[0]=1;
			ind=0;
		}
		
		else
		{
			
			
		if(x>q[ind])
		{
			ind++;
			q[ind]=x;
			p[i]=ind+1;
		}
		else 
			if(x==q[ind])
			{
				p[i]=p[i-1];
			}
			else
		{
			insert(x,0,ind);
			p[i]=loc+1;
			
		}
		
		
		}
	}
	
	printf("%ld\n",ind+1);
	int c=ind+1;
	int c2=ind;
	ind=n-1;
	
	while(c>0)
	{
		if(p[ind]==c)
		{
			c--;
			ras[c]=v[ind];
		}
		ind--;
		
	}
	
	for(int i=0;i<=c2;i++) printf("%ld ",ras[i]);
	return 0;
}