Cod sursa(job #513232)

Utilizator theodora_maneaManea Theodora Maria theodora_manea Data 15 decembrie 2010 15:33:26
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.74 kb
#include <stdio.h>

#define max 2000001;

int n,a[100001],p[100001],q[100001],sol[100001];
int lg,m,i;

int insert(int x,int st,int dr) {
	int m;
	m=(st+dr)/2;
	if (st==dr) {
		if (dr>lg) {
			lg++;
			q[lg+1]=max;
		}
		q[st]=x;
		return st;
	}
	if (x<=q[m]) return insert(x,st,m);
	       else return insert(x,m+1,dr);
}

void afis() {
	int i;
	for (i=lg; i>=1; i--) {
		while (p[m]!=i) m--;
		sol[i]=a[m];
	}
	printf("%d\n",lg);
	for (i=1; i<=lg; i++) printf("%d ",sol[i]);
}

int main () {
	freopen("scmax.in","r",stdin);
	freopen("scmax.out","w",stdout);
	scanf("%d",&n);
	for (i=1; i<=n; i++) scanf("%d",&a[i]);
	lg=0;
	q[1]=max;
	for (i=1; i<=n; i++) 
		p[i]=insert(a[i],1,lg+1);
	m=n;
	afis();
	return 0;
}