Cod sursa(job #1566538)

Utilizator alexblackFMI - Dumitrache Alexandru alexblack Data 12 ianuarie 2016 11:36:12
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.84 kb
#include<iostream>
#include<fstream>
using namespace std;
ifstream  in("scmax.in");
ofstream out("scmax.out");
int const N=100005;
int n,k,v[N],best[N],p[N],L[N];
void print(int x)
{
	if(p[x]>0) print(p[x]);
	out<<v[x]<<" ";	
}
int caut(int x)
{
   int l, r, m;
   l=0;r=k;m=(l+r)/2;
   while(l<=r)
   {
      if (v[L[m]] < x &&  v[L[m+1]] >= x) return m;
      if (v[L[m+1]] < x) 
      	l=m+1 , m=(l+r)/2;
      else 
      	r=m-1 , m=(l+r)/2;
   }
   return k;
}
int main()
{
	in>>n;
	for(int i=1;i<=n;i++)
		in>>v[i];
	k=1; best[1]=1; L[1]=1; L[0]=0;
	int poz;
	for(int i=2;i<=n;i++)
	{
		poz=caut(v[i]);
		p[i]=L[poz];
		best[i]=poz+1;
		if(k<best[i]) k=best[i];
		L[poz+1]=i;
	}
	int maxi=0;poz=0;
	for(int i=1;i<=n;i++)
		if(maxi<best[i])
			maxi=best[i],poz=i;
	out<<maxi<<"\n";
	print(poz);
	return 0;
}