Cod sursa(job #807476)

Utilizator danutbodbodnariuc danut danutbod Data 4 noiembrie 2012 19:36:33
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.79 kb
#include <fstream>
using namespace std;
#define LMax 100010
int v[LMax],s[LMax],L[LMax],sol[LMax],n,i,j,k,poz,p,maxi;
ifstream f("scmax.in");
ofstream g("scmax.out");
int caut_bin(int x){
	int mij,st,dr;
	st=1;dr=k;
	while(st<=dr){
		mij=(st+dr)/2;
		if(s[mij-1]<x&&s[mij]>=x)return mij;
		else
		     if(s[mij]>x)dr=mij-1;
		     else st=mij+1;
	}
	return 0;

}

int main(){
	f>>n;
	for(i=1;i<=n;i++)f>>v[i];
	s[1]=v[1];
	L[1]=1;
	k=1;
	for(i=2;i<=n;i++){
		poz=caut_bin(v[i]);
		if(poz==0){ s[++k]=v[i];L[i]=k;}
		else {s[poz]=v[i];L[i]=poz;}
	}
	for(i=1;i<=n;i++)
		if(L[i]>maxi){ maxi=L[i];p=i; }
	k=0;
	g<<maxi<<'\n';
	while(maxi){
		if(L[p]==maxi) { sol[++k]=v[p]; maxi--;}
		p--;
	}
	for(i=k;i>0;i--)	g<<sol[i]<<" ";
	g<<'\n';
	f.close();g.close();
	return 0;
}