Cod sursa(job #256777)

Utilizator BuRNB Radu BuRN Data 12 februarie 2009 10:13:44
Problema Subsir crescator maximal Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 0.71 kb
#include <stdio.h>
#define nmax 100001
FILE *in,*out;

long int a[nmax],lung[nmax],ant[nmax],b[nmax],max;
int main()
{
long int n,i,ok=1,j,poz;
in = fopen ("scmax.in","r");
out =fopen ("scmax.out","w");
fscanf(in,"%d",&n);

for(i=1;i<=n;i++)
	fscanf(in,"%ld",&a[i]);
for(i=1;i<=n;i++)
	lung[i]++;

lung[1]=1;
for(i=2;i<=n;i++)
{
	for(j=i-1;j>0;j--)
	if(a[j]<a[i] && lung[i]<lung[j]+1 )
	{
		lung[i]=lung[j]+1;
		ant[i]=j;
	}

}

for(i=1;i<=n;i++)
	if(lung[i]>max)
	{
		max=lung[i];
		poz=i;
	}

for(j=1,i=poz;ok!=0;j++)
{
	if(ant[i]==0)
		ok=0;
	b[j]=a[i];
	i=ant[i];
}

fprintf(out,"%ld \n",max);
for(i=j-1;i>0;i--)
	fprintf(out,"%ld ",b[i]);
fclose(in);
fclose(out);
return 0;
}