Cod sursa(job #791196)

Utilizator avramavram andrei marius avram Data 23 septembrie 2012 12:35:47
Problema Subsir crescator maximal Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 0.95 kb
#include<stdio.h>
#define DIM 100010
int i,j,v[DIM],l[DIM],p,n,maxi,ok,maxim,w[DIM],k, t[DIM], pozmaxi, pmax, S[DIM];

//t[i] = pozitia elementului ce il precede pe V[i] in subsirul maxim ce se termina pe pozitia i

int main()
{
	freopen("scmax.in","r",stdin);
	freopen("scmax.out","w",stdout);
	scanf("%d",&n);
	for(i=1;i<=n;i++)
		scanf("%d",&v[i]);
	l[1]=1;
	maxi=1;
	for(i=2;i<=n;i++)
	{
		maxim = 0;
		for(j=i-1;j>=1;j--)
		{
			if (v[j] < v[i] && (l[j] > maxim)) {
				maxim = l[j];
				pmax = j;
			}
		}
		if (maxim!=0) {
			t[i] = pmax;
		}
		
		l[i] = 1 + maxim;
		
		if(l[i]>maxi) {
			maxi=l[i];
			pozmaxi = i;
		}
		ok=0;
	}
	printf("%d\n",maxi);
	
	
	k=maxi;
	j=n;
	w[k+1]=99999999;
	while(k>0)
	{
	for(i=1;i<=j;i++)
	{
		if(l[i]==k)
		{
			if(v[i]<w[k+1])
			{
			w[k]=v[i];
			j=i-1;
			k--;
			}
		}
	}
	}
	for(i=1;i<=maxi;i++)
	{
		printf("%d ",w[i]);
	}

	return 0;
}