Cod sursa(job #2158061)

Utilizator shantih1Alex S Hill shantih1 Data 10 martie 2018 10:09:51
Problema Subsir crescator maximal Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 0.82 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 lg,n,i,j,v[100005],rz[100005];
vector<int> tail;

int cbin(int k)
{
	int st=1,dr=lg-1,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++;
	if(tail[m-1]>=k)	m--;
	return m;
}

int main () {

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