Cod sursa(job #664659)

Utilizator TodeaDariustodea darius TodeaDarius Data 20 ianuarie 2012 16:37:23
Problema Subsir crescator maximal Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
#include<fstream>
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
#define nmax 100005;
int i,n,a[100005],v[100005],l[100005],mij,st,dr,p,lmax,nr,poz;
int pozitie(int t)
{
	st=1;dr=nr;
	while(st<=dr)
	{
		mij=(st+dr)/2;
		if(t==v[mij])
		{
			return mij;
		}
		else
		if(t<v[mij])
		{
			dr=mij-1;
		}
		else
		{
			st=mij+1;
		}
	}
	return st;
}
void afisare(int poz)
{ int i,t;
	if(l[poz]>1)
	{
		for(i=poz-1;i>0;i--)
		{
			if(l[i]+1==l[poz] && a[i]<a[poz])
			{
				t=i;break;
			}
		}
		afisare(t);
		g<<a[poz]<<' ';
	}
	else g<<a[poz]<<' ';
}
int main()
{
	f>>n;nr=1;f>>a[1];v[1]=a[1];
	lmax=1;
	for(i=2;i<=n;i++)
	{
		f>>a[i];
		p=pozitie(a[i]);v[p]=a[i];
		if(p>nr)nr++;
		if(p>lmax)
		{lmax=p;poz=i;}
		l[i]=p;
	}
	g<<lmax<<'\n';
	afisare(poz);
	/*for(i=1;i<=nr;i++)
	{
		g<<v[i]<<' ';
	}*/
	return 0;
}