Cod sursa(job #300982)

Utilizator c_iulyanCretu Iulian c_iulyan Data 7 aprilie 2009 20:34:12
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.67 kb
#include<fstream>
#include<algorithm>
#define N 100001
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");

long x[N],l[N],a[N],n;

void rd()
{
f>>n;
for(long i=1;i<=n;i++)
	{
	f>>x[i];
	}
}

long cauta(int r,int n)
{
long s=1,d=n;
while(s<=d)
	{
	long m=(s+d)/2;
	
	if(x[l[m]]>r&&x[l[m+1]]<r) return m;
	if(x[l[m]]>r)
		s=m+1;
	else 
		d=m-1;
	}
return 0;
}

void go()
{
a[n]=1;
l[1]=n;

long i,mx=1;
for(i=n-1;i;i--)
	{
	long pz=cauta(x[i],mx);
	a[i]=pz+1;
	l[pz+1]=i;
	if(a[i]>mx) mx=a[i];	
	}
	
g<<mx<<"\n";
for(i=1;i<=n;i++)
	if(a[i]==mx)
		g<<x[i]<<" ",mx--;
}

int main()
{

rd();
go();

return 0;
}