Cod sursa(job #2158032)

Utilizator shantih1Alex S Hill shantih1 Data 10 martie 2018 09:43:59
Problema Subsir crescator maximal Scor 65
Compilator cpp Status done
Runda Arhiva educationala Marime 0.75 kb
// facem varianta de 70 de pt cu programare dinamica.
// am revenit si am o varianta de 100 cu cautare binara.
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");

int lng,n,i,j,nr,mx,v[100005],f[100005];
vector<int> tail;

int cbin(int k)
{
	int st=1,dr=lng,m=0;
	while(st<=dr)
	{
		m=st+(dr-st)/2;
		if(tail[m]>=k)	dr=m-1;
		else	st=m+1;
	}
	if(tail[m]<k)	m++;
	return m;
}

int main () {

	fin>>n;
	for(i=1;i<=n;i++)
		fin>>v[i];
	
	tail.push_back(v[1]);
	lng=0;
	for(i=2;i<=n;i++)
	{
		if(v[i]<=tail[0])	tail[0]=v[i];
		else if(v[i]>tail[lng])	
		{
			tail.push_back(v[i]);
			lng++;
		}
		else	tail[cbin(v[i])]=v[i];
	}
	
	fout<<lng+1<<"\n";
	for(i=0;i<=lng;i++)
		fout<<tail[i]<<" ";
}