Cod sursa(job #2342886)

Utilizator alex2209alexPavel Alexandru alex2209alex Data 13 februarie 2019 14:56:26
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.65 kb
#include <fstream>
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
int n,i,j,v[100001],best[100001],pre[100001],sol[100001],ma,st,dr,mij;
int main()
{
	f>>n;
	for(i=1; i<=n; i++)
	{
		f>>v[i];
	}
	best[1]=1;
	ma=1;
	for(i=2; i<=n; i++)
	{
		st=1;
		dr=ma;
		while(st<=dr)
		{
			mij=(st+dr)/2;
			if(v[best[mij]]<v[i])
			{
				st=mij+1;
			}
			else
			{
				dr=mij-1;
			}
		}
		if(st>ma)
		{
			ma++;
		}
		best[st]=i;
		pre[i]=best[st-1];
	}
	g<<ma<<'\n';
	i=best[ma];
	j=0;
	while(i!=0)
	{
		sol[++j]=i;
		i=pre[i];
	}
	for (i = ma; i >= 1; i--)
	{
		g<<v[sol[i]]<<" ";
	}
	return 0;
}