Cod sursa(job #1311394)

Utilizator Tzappy90Mihalache Constantin Tzappy90 Data 8 ianuarie 2015 01:13:53
Problema Subsir crescator maximal Scor 70
Compilator c Status done
Runda Arhiva educationala Marime 0.98 kb
#include <stdio.h>
#include <stdlib.h>
void read(FILE *in, int v[],int n)
{
	int i;
	for(i=0;i<n;i++)
		fscanf(in,"%d",&v[i]);
}
int subsir_crescator_maximal(int num[], int n, int Lmax[], int urm[])
{
	int start = n-1,i,j,max = 1;
	Lmax[start] = 1;
	urm[start] = -1;
	for(i=n-2;i>=0;i--)
	{
		Lmax[i] = 1;
		urm[i] = -1;
		for(j=i+1;j<n;j++)
			if(num[i]<num[j] && Lmax[i]<Lmax[j]+1)
			{
				Lmax[i] = Lmax[j]+1;
				urm[i] = j;
				if(Lmax[i]>max){start = i; max = Lmax[i];}
			}
	}
	return start;
}
int main()
{
	FILE *in = fopen("scmax.in","r"), *out = fopen("scmax.out","w");
	int n, *num, *Lmax, *urm,start=0,i;
	fscanf(in,"%d",&n);
	num = (int*)malloc(n*sizeof(int));
	Lmax = (int*)malloc(n*sizeof(int));
	urm = (int*)malloc(n*sizeof(int));
	read(in,num,n);
	start = subsir_crescator_maximal(num,n,Lmax,urm);
	fprintf(out,"%d\n",Lmax[start]);
	for(i = start; i!=-1; i=urm[i])
		fprintf(out,"%d ",num[i]);
	fprintf(out,"\n");
	fclose(in);fclose(out);
	free(num);free(Lmax);free(urm);
	return 0;
}