Cod sursa(job #709946)

Utilizator osiceanu_paulOsiceanu paul osiceanu_paul Data 8 martie 2012 18:41:46
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.61 kb
#include<stdio.h>
using namespace std;

int x[100001],a[100001],n,nr,pred[100001];

int cautbin(int k)
{
	int i,pas=1<<16;
	for(i=0;pas;pas>>=1)
		if((i+pas<=nr)&&(a[x[i+pas]]<a[k])) i+=pas;
	return i+1;
}
void predecesor(int k)
{
	if(pred[k]) predecesor(pred[k]);
	printf("%d ",a[k]);
}

int main()
{
	int j,i;
	freopen("scmax.in","r",stdin);
	freopen("scmax.out","w",stdout);
	scanf("%d ",&n);
	for(i=1;i<=n;i++)
		scanf("%d",&a[i]);
	x[1]=1;
	nr=1;
	for(i=1;i<=n;i++)
	{
		j=cautbin(i);
		x[j] = i;
		if(j>nr) 
			++nr;
		pred[i]=x[j-1];
	}
	printf("%d\n",nr);
	predecesor(x[nr]);
}