Cod sursa(job #588940)

Utilizator Anamaria20Cotirlea Anamaria Anamaria20 Data 10 mai 2011 09:42:00
Problema Subsir crescator maximal Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 0.89 kb
#include <stdio.h>

FILE *f,*s;

int i,j,k,l,m,n;

int v1[100005],v2[100005],v3[100005],v4[100005];

int main()
{
	f=fopen("scmax.in","r");
	s=fopen("scmax.out","w");
	
	fscanf(f,"%d",&n);
	
	for(i=1;i<=n;i++)
		fscanf(f,"%d",&v1[i]);
	
	l=1;
	
	v2[1]=1;
	v3[1]=1;
	
	for(i=1;i<=n;i++)
	{
		int st=1;
		int dr=l;
		
		while(st<=dr)
		{
			int mij=(st+dr)/2;
			
			if(v1[i]>v1[v3[mij]])
				st=mij+1;
			else
				dr=mij-1;
		}
		
		if(st<=l)
		{
			v3[st]=i;
			v2[i]=l;
		}	
		else
		{
			l++;
			v3[l]=i;
			v2[i]=l;
		}	
	}
	
	int max=0;
	for(i=1;i<=n;i++)
	{
		if(v2[i]>v2[max])
			max=i;
	}
	
	fprintf(s,"%d\n",v2[max]);
	
	i=v2[max];
	
	k=v2[max];
	
	l=0;
	
	for(i=n;i>=1;i--)
	{
		if(k==v2[i] && v1[i]<v4[l])
		{
			v4[++l]=v1[i];
			k--;
		}	
	}	
	
	for(i=l;i>=1;i--)
		fprintf(s,"%d ",v4[i]);
	
	fclose(s);
	
	return 0;
}