Cod sursa(job #575215)

Utilizator nicolaetitus12Nicolae Titus nicolaetitus12 Data 8 aprilie 2011 01:50:14
Problema Subsir crescator maximal Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 0.72 kb
#include <stdio.h>
#include <stack>
using namespace std;
#define N 100005

int sir[N];
int cnt[N];
int prev[N];
int main ()
{	freopen("scmax.in","r",stdin);
	freopen("scmax.out","w",stdout);
	int i,n,m,j;
	scanf("%d",&n);	
	for (i=1;i<=n;i++)
	{	scanf("%d",&sir[i]);
	}
	cnt[1]=1;
	prev[1]=1;
	m=1;
	for (i=2;i<=n;i++)
	{	for (j=m;j>=1;j--)
		{	
			if(sir[i]>sir[cnt[j]])
			{	prev[i]=cnt[j];
				break;
			}
		}
		if(j==0)
		{	cnt[1]=i;
			prev[i]=0;
		}
		else
		{	if(j+1>m)
			{	m=j+1;
				cnt[j+1]=i;
			}
			else if(sir[cnt[j+1]]>sir[i])
			{	cnt[j+1]=i;
					
			}
		}
	}
	printf("%d\n",m);
	stack<int> s;
	for (i=cnt[m];i!=0;i=prev[i])
	{	s.push(sir[i]);
	}
	while(!s.empty())
	{	printf("%d ",s.top());
		s.pop();
	}
	return 0;
}