Cod sursa(job #931177)

Utilizator Marius96Marius Gavrilescu Marius96 Data 28 martie 2013 01:13:30
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.72 kb
#include<cctype>
#include<cstdio>

#include<algorithm>
static int v[100005], x[100005], d[100005], r[100005];

int g()
{
	int x;
	while(!isdigit (x=getchar()));
	int ret=x-'0';
	while(isdigit (x=getchar()))
		ret=ret*10+x-'0';

	return ret;
}

#define BUFSIZE 1024*1024
static char buf[BUFSIZE];

int main()
{
	freopen ("scmax.in","r",stdin);
#ifdef INFOARENA
	freopen ("scmax.out","w",stdout);
#endif

	setvbuf (stdin, buf, _IOFBF, BUFSIZE);
	int n=g(), nx=0;
	for(int i=0;i<n;i++){
		v[i]=g();
		int *p=std::lower_bound (x,x+nx,v[i]);
		if(p==x+nx)
			nx++;
		*p=v[i];
		d[i]=p-x;
	}

	int rn=0;
	while(n-->=0)
		if(d[n]==nx-1){
			r[rn++]=v[n];
			nx--;
		}

	printf ("%d\n",rn);
	for(int i=rn;i;i--)
		printf ("%d ",r[i-1]);
	return 0;
}