Cod sursa(job #714655)

Utilizator Kira96Denis Mita Kira96 Data 15 martie 2012 22:19:36
Problema Subsir crescator maximal Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.12 kb
#include<stdio.h>
#include<vector>
#include<algorithm>
using namespace std;
int mij,j,n,i,sir[1001000],j1,i1,nr,found,v[100100],lmax,OK,xo[100100];
int main ()
{
	freopen("scmax.in","r",stdin);
	freopen("scmax.out","w",stdout);
	scanf("%d",&n);
	for(i=1;i<=n;i++)
	{
		scanf("%d",&sir[i]);
	}
	v[1]=sir[1];
	lmax=1;
	int max=0;
	for(i=2;i<=n;i++)
	{
		i1=1; j1=lmax; OK=1;
		if(sir[i]>v[1]&&sir[i]<v[lmax])
		{
		while(i1+1!=j1)
		{
			mij=(i1+j1)/2;
			if(sir[i]==v[mij])
			{ OK=0;
				break; }
			if(sir[i]>v[mij])
			{
				i1=mij+1;
			}
			else
				if(sir[i]<v[mij])
				{
					j1=mij-1;
				}
		}
		if(OK==1)
			{
				v[j1]=sir[i];
				lmax-=(n-j1); n=j1;
				for(j=j1+1;j>=lmax+1;j++)
					v[j]=0;
				found=1;
				break;
			}
		}
		else
			if(sir[i]>v[j1])
			{
				v[++j1]=sir[i];
				lmax=lmax+1;
			}
			else
		if(sir[i]<v[1])
			{
				for(j=1;j<=lmax;j++)
					v[j]=0;
				v[1]=sir[i];
				lmax=1;
			}
		if(lmax>max)
		{
			max=lmax;
			for(j=1;j<=max;j++)
				xo[j]=v[j];
		}
	}
	printf("%d\n",max);
	for(i=1;i<=max;i++)
	{
		printf("%d ",xo[i]);
	}
	return 0;
}