Cod sursa(job #1361184)

Utilizator NicuCJNicu B. NicuCJ Data 25 februarie 2015 20:02:13
Problema Subsir crescator maximal Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 0.67 kb
#include <fstream>
#include <algorithm>
#include <stack>
using namespace std;
int n, i, a[100001], q[100001], m, poz, p[100001];
stack <int> stiva;
int main()
{
	ifstream f("scmax.in");
	ofstream g("scmax.out");
	
	f>>n;
	for(i=1; i<=n; i++)
	{
		f>>a[i];
	}
	q[1]=a[1];
	p[1]=1;
	m=1;
	for(i=2; i<=n; i++)
	{
		poz=lower_bound(q, q+m+1, a[i])-q;
		if(poz>m)
		{
			m++;
			q[m]=a[i];
			p[i]=m;
		}
		else
		{
			q[poz]=a[i];
			p[i]=poz;
		}
	}
	g<<m<<"\n";
	for(i=n; i>=1; i--)
	{
		if(poz==0)
			break;
		if(p[i]==poz)
		{
			stiva.push(a[i]);
			poz--;
		}
	}
	while(!stiva.empty())
	{
		g<<stiva.top()<<" ";
		stiva.pop();
	}
}