Cod sursa(job #422131)

Utilizator tranbachhaiTran Bach Hai tranbachhai Data 22 martie 2010 10:42:23
Problema Subsir crescator maximal Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.63 kb
#include<stdio.h>

int n,v[100010],poz[100010];

int main()
{
	int i,st,dr,m,j;
	freopen("scmax.in","r",stdin);
	freopen("scmax.out","w",stdout);
	
	scanf("%d",&n);
	for (i=1;i<=n;++i)
		scanf("%d\n",&v[i]);
	for (i=1;i<=n;++i)
			if (v[i]>=poz[poz[0]])
					poz[++poz[0]]=v[i];
			else
			{
				st=1;
				dr=poz[0];
				while(st+2<dr)
					{
						m=(st+dr)/2;
						if (v[m]>=st)
								dr=m;
						else
								st=m;
					}
			for (j=st-2;j<=dr+2;++j)
				if (poz[j-1]<=v[i] && v[i]<=poz[j+1])
					poz[j]=v[i];
			}
	printf("%d\n",poz[0]);
	for (i=1;i<=poz[0];++i)
		printf("%d ",poz[i]);
	return 0;
}