Cod sursa(job #486166)

Utilizator ChallengeMurtaza Alexandru Challenge Data 20 septembrie 2010 18:01:57
Problema Subsir crescator maximal Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 0.86 kb
#include <fstream>
#include <vector>

using namespace std;

const char InFile[]="scmax.in";
const char OutFile[]="scmax.out";
const int MaxN=100010;

ifstream fin(InFile);
ofstream fout(OutFile);

int v[MaxN],best[MaxN],ind[MaxN],n;
vector<int> sir;

int main()
{
	fin>>n;
	best[0]=0;
	v[0]=0;
	for(register int i=1;i<=n;++i)
	{
		fin>>v[i];
		for(register int j=0;j<i;++j)
		{
			if(v[i]>v[j])
			{
				if(best[i]<best[j])
				{
					best[i]=best[j];
					ind[i]=j;
				}
			}
		}
		++best[i];
	}

	int vmax=0;
	int imax=0;
	for(register int i=1;i<=n;++i)
	{
		if(vmax<best[i])
		{
			vmax=best[i];
			imax=i;
		}
	}
	fin.close();

	while(imax!=0)
	{
		sir.push_back(v[imax]);
		imax=ind[imax];
	}

	fout<<vmax<<"\n";
	for(register int i=(int)sir.size()-1;i>=0;--i)
	{
		fout<<sir[i]<<" ";
	}
	fout.close();
	return 0;
}