Cod sursa(job #534683)

Utilizator mariusandreiMarius Lucian Andrei mariusandrei Data 15 februarie 2011 23:25:54
Problema Subsir 2 Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.99 kb
#include<stdio.h>
#define N 5001
#define MAX_IM -1000001
#define MIN_IM 1000001
using namespace std;

long v[N], minim;
int best[N];
int sol[N];
int maxim=0;
int n;
void citire()
{
	freopen("subsir2.in","r",stdin);
	scanf("%d",&n);
	for (int i=1;i<=n;i++)
		scanf("%ld",&v[i]);
}

void vector()
{
	int x=1;
	minim=v[1];
	maxim=0;
	sol[1]=1;
	best[1]=1;
	for(int i=2;i<=n;i++)
		if(minim>v[i])
		{	
			x=i;
			minim=v[i];
			maxim=1;
			best[x]=1;
		}			
		else
		{
			int max=MAX_IM;
			for(int j=x;j<i;j++)
			{
				if(max<best[j]&&v[j]<v[i])
				{
					max=best[j];
					best[i]=max+1;	
				}
				if(v[i]==v[j])
					max=best[j];
			}
			if(maxim<best[i])
				maxim=best[i];
		}
}
void afisare()
{
	freopen("subsir2.out","w",stdout);
	printf("%d\n",maxim);
	for(int i=1;i<=maxim;i++)
		printf("%d ",sol[i]);
	
	printf("\n");

	for(int i=1;i<=n;i++)
		printf("%d ",best[i]);

	
}
int main()
{
	citire();
	vector();
	afisare();
	return 0;
}