Cod sursa(job #280024)

Utilizator ciorile.chioareBogatu Adrian ciorile.chioare Data 13 martie 2009 10:14:08
Problema Subsir crescator maximal Scor 35
Compilator cpp Status done
Runda Arhiva educationala Marime 0.98 kb
#include<stdio.h>
#define N 100008

int n;
int v[N];
int lung[N];
int maximum=0;
int poz[N];
int p;

void citire()
{
	scanf("%d",&n);
	for(int i=1;i<=n;++i)
		scanf("%d",&v[i]);
}

void rez()
{
	int i,j;
	int maxl=0;
	int max;	
	
	lung[1]=1;
	
	for(i=2;i<=n;++i)
	{
		max=v[i];
		maxl=lung[i];
		for(j=1;j<i;++j)
		{
			if(v[i]>v[j])
			{
				if(lung[j]>maxl)
					maxl=lung[j];
				max=v[j];
			}
		}
		lung[i]=maxl+1;
		if(lung[i]>maximum)
		{
			maximum=lung[i];
			p=i;
		}
		
	}
}


void afisare()
{
	printf("%d ",maximum);
	printf("%d",p);
	printf("\n");
	
	for(int i=maximum;i>=1;--i)
		printf("%d ",poz[i]);
	printf("\n");
	
}

void vector()
{
	int i,curr,nr=0;
	curr=maximum;
	for(i=p;i>=1;--i)
	{
		if(curr==lung[i])
		{
			poz[++nr]=v[i];
			curr--;
		}
	}
}

int main()
{
	
	freopen("scmax.in","r",stdin);
	freopen("scmax.out","w",stdout);
	
	citire();
	rez();
	vector();
	afisare();
	
	
	return 0;
}