Cod sursa(job #314929)

Utilizator gabipurcaruGabi Purcaru gabipurcaru Data 13 mai 2009 19:44:40
Problema Subsir crescator maximal Scor 90
Compilator c Status done
Runda Arhiva educationala Marime 1.09 kb
#include <stdio.h>

#define MID ((li+ls)/2)

//ifstream in("scmax.in");
//ofstream out("scmax.out");
FILE *in,*out;


long a[100005],i,n,k[100005],j,li,ls,q,x[100005],max;

long bin(long val)
{
li=1;
ls=k[0];
if(k[1]>val)
	return 1;
if(k[k[0]]<val)
	return 0;
while(li<=ls)
	{
	if(k[MID] < val && k[MID+1]>=val)
		return MID+1;

	if(k[MID] < val)
		li=MID+1;
	else if(k[MID]>val)
		ls=MID-1;
	}
return 0;
}

int main()
{
//in>>n;
in = fopen("scmax.in","r");
out = fopen("scmax.out","w");
fscanf(in,"%ld",&n);
for(i=1; i<=n; i++)
	{
//	in>>x[i];
	fscanf(in,"%ld",&x[i]);
	q = bin(x[i]);
	if(!q)
		{
		k[++k[0]]=x[i];
		a[i]=k[0];
		}
	else
		{
		k[q]=x[i];
		a[i]=q;
		}
	if(a[i] > a[max])
		max=i;
	}


//for(i=1; i<=n; i++)
  //	out<<a[i]<<' '
    //
    	;
//out<<'\n';

//out<<a[max]<<'\n';
fprintf(out,"%ld\n",a[max]);
k[0]=1;
k[1]=x[max];
for(i=max-1; a[max]-1 && i>=1; i--)
	if(a[i]==a[max]-1 && x[i]<x[max])
		{
		k[++k[0]] = x[i];
		max=i;
		}
for(i=k[0]; i>=1; i--)
	//out<<k[i]<<' ';
	fprintf(out,"%ld ",k[i]);


return 0;
}