Cod sursa(job #2509968)

Utilizator eusebiu_alexandruMorar Eusebiu eusebiu_alexandru Data 15 decembrie 2019 14:21:39
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.7 kb
#include<fstream>
using namespace std;
ifstream f ("scmax.in");
ofstream g ("scmax.out");
int nr[100100],h,best[100100],pred[100100],lista[100100];

int caut(int x){
	int st=0,dr=h,mij;
	while(st<dr){
		mij=(st+dr+1)>>1;
		if(nr[lista[mij]]==x)
			return mij-1;
		if(nr[lista[mij]]<x)
			st=mij;
		else
			dr=mij-1;
	}
	return st;
}
void scrie(int i){

	if(!i)
		return;
	scrie(pred[i]);
	g<<nr[i]<<" ";
}
int main()
{
	int n,i,max=0,poz;

	f>>n;

	for(i=1;i<=n;++i){

		f>>nr[i];
		poz=caut(nr[i]);
		lista[poz+1]=i;

		if(poz+1>h)

			h=poz+1;

		best[i]=poz+1;
		pred[i]=lista[poz];
		if(best[i]>best[max])
			max=i;
	}
	g<<best[max];
	g<<'\n';
	scrie(max);
}