Cod sursa(job #609215)

Utilizator alexalghisiAlghisi Alessandro Paolo alexalghisi Data 20 august 2011 10:53:06
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.84 kb
#include <cstdio>
#include <iostream>
#include <vector>
using namespace std;

int v[100013],dp[100013],urm[100013],poz;
vector<int> dp2;

int main()
{	
	int i,n,j;
	freopen("scmax.in","r", stdin);
	scanf("%d",&n);
	for(i=1;i<=n;i++) 
		scanf("%d",&v[i]);
	for(i=n;i>=1;i--)
	{
		for(j=dp2.size()-1;j>=0;j--)
		{
			if(v[dp2[j]]>v[i])	
			{
				dp[i]=j+2;
				urm[i]=dp2[j];
				if(dp[i]>dp2.size()) dp2.push_back(i);
				else if(v[dp2[dp[i]-1]]<v[i]) dp2[dp[i]-1]=i;
				break;
			}
		}
		
		if(dp[i]==0) 
			{
				dp[i]=1;
				urm[i]=0;
				if(dp2.size()==0) dp2.push_back(i);
				else if(v[dp2[0]]<v[i]) dp2[0]=i;
		}



		if(dp[i]>dp[poz]) poz=i;	
	}
	freopen("scmax.out","w", stdout);
	cout<<dp[poz]<<"\n";
	for(i=poz;i!=0;i=urm[i])
	{
		cout<<v[i]<<" ";
	}
	fclose(stdin);
	fclose(stdout);
	return 0;
}