Cod sursa(job #811128)

Utilizator dsfm_danielaasd mghd dsfm_daniel Data 11 noiembrie 2012 15:58:55
Problema Subsir crescator maximal Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 0.82 kb
#include <cstdio>
using namespace std;


#define dim 100000

int n,a[dim],L[dim],p[dim];
FILE *f1=fopen("scmax.in","r"),*f2=fopen("scmax.out","w");


int init()
{
	for (int i=1;i<=n;i++)
		L[i]=1,p[i]=i;
}

void read()
{
	fscanf(f1,"%d\n",&n);
	for (int i=1;i<=n;i++)
		fscanf(f1,"%d ",&a[i]);
	fclose(f1);
}

void PD()
{
	int i,j;
	for (i=n-1;i>=1;i--)
		for (j=i+1;j<=n;j++)
			if (a[i]<a[j] && L[i]<=L[j])
				L[i]=L[j]+1,p[i]=j;
}

int search()
{
	int k,max=-1,i;
	for (i=1;i<=n;i++)
		if (L[i]>max)
			max=L[i],k=i;
	return k;
}

void print(int k)
{
	int i,j;
	fprintf(f2,"%d\n",L[k]);
	for (i=1,j=k;i<=L[k];i++,j=p[j])
		fprintf(f2,"%d ",a[j]);
    fprintf(f2,"\n");
    fclose(f2);
}

int main (void)
{
	read();
	init();
	PD();
	int k;
	k=search();
	print (k);
	return 0;
}