Cod sursa(job #314923)

Utilizator gabipurcaruGabi Purcaru gabipurcaru Data 13 mai 2009 19:37:52
Problema Subsir crescator maximal Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 0.87 kb
#include <fstream.h>

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

ifstream in("scmax.in");
ofstream out("scmax.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;
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;
for(i=1; i<=n; i++)
	{
	in>>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';
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]<<' ';


return 0;
}