Cod sursa(job #552925)

Utilizator CBogdanCiobanu Bogdan CBogdan Data 13 martie 2011 10:35:52
Problema Subsir crescator maximal Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 0.67 kb
#include<cstdio>
using namespace std;

int n,i,j,S,maxim,V[100010],best[100010],pre[100010];

void read(),solve(),show(int);

int main()
{
	read();
	solve();
	show(S);
	
	return 0;
}

void read()
{
	freopen("scmax.in","r",stdin);
	freopen("scmax.out","w",stdout);
	scanf("%d",&n);
	for(i=1;i<=n;i++){scanf("%d",&V[i]);best[i]=1;pre[i]=i;}
}

void solve()
{
	best[1]=1;
	for(i=2;i<=n;i++)
		for(j=i;j;j--)
			if(V[j]<V[i])
				if(best[j]+1>best[i]){best[i]=best[j]+1;pre[i]=j;if(best[i]>maxim){S=i;maxim=best[i];}}
	printf("%d\n",best[S]);
}

void show(int s)
{
	if(pre[s]==s){printf("%d ",V[s]);return;}
	show(pre[s]);
	printf("%d ",V[s]);
}