Cod sursa(job #1731168)

Utilizator serbanmaria15Serban Maria-Catalina serbanmaria15 Data 18 iulie 2016 14:37:11
Problema Subsir crescator maximal Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.01 kb
#include<stdio.h>

int n,a[100001],lungimeMax, lungMax[100001],predecesor[100001], ultimElemSubsir, max, subsir[100001];
FILE *inputFile, *outputFile;

void lungSirMaximal()
{
	int i,j;
	lungMax[1]=1;
	predecesor[1]=-1;
	max=1;
	for(i=2; i<=n; i++)
	{
		lungMax[i]=1;
		predecesor[i]=-1;
			for(j=1; j<i; j++)
			{
				if((a[j] < a[i]) && (lungMax[i] < lungMax[j] + 1))
				{
					lungMax[i]=lungMax[j]+1;
					predecesor[i]=j;
					if(lungMax[i] > max)
					{
						max=lungMax[i];
					    ultimElemSubsir=i;
					}
				}
			}
		}
					
	}

int main()
{
	inputFile=fopen("scmax.in","r");
	outputFile=fopen("scmax.out","w");
	
	fscanf(inputFile, "%d", &n);
	for(int i=1; i<=n; i++)
	{
		fscanf(inputFile, "%d", &a[i]);
	}
    lungSirMaximal();
	fprintf(outputFile,"%d", max);
	fprintf(outputFile, "\n");
	
	int i=ultimElemSubsir, k=0;
	while(i != -1)
	{
		subsir[k++]=a[i];
		i=predecesor[i];
	}
	for(i=k-1; i>=0; i--)
	{
		fprintf(outputFile, "%d ", subsir[i]);
	}
	return 0;
}