Cod sursa(job #693073)

Utilizator anca1243Popescu Anca anca1243 Data 27 februarie 2012 09:00:52
Problema Subsir crescator maximal Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("scmax.in");
ofstream out("scmax.out");
const int N=100001;
int v[N],lung[N],n,pred[N];

void refac(int p)
{
    if(pred[p]!=0)
        refac(pred[p]);
    out<<v[p]<<" ";
}
int pozitie(int max)
{
    int p=1;
    while(lung[p]!=max)
        p++;
    return p;
}
int maxim()
{
	int a=0;
	for(int i=1;i<=n;i++)
		if(lung[i]>a)
        {
            a=lung[i];
        }
	return a;
}

void lungime()
{
    int i,j;
    lung[1]=1;
    for(i=2;i<=n;i++)
    {
        lung[i]=0;
        for(j=1;j<i;j++)
        {
            if(v[j]>=v[i]) continue;
            if(lung[j]>lung[i])
            {
                lung[i]=lung[j];
                pred[i]=j;
            }
        }
		lung[i]++;
	}
    return;
}
int main()
{
    int i=1,max=0,p;
    in>>n;
    for(i=1;i<=n;i++)
        in>>v[i];
    lungime();
	max=maxim();
	out<<max<<"\n";
	p=pozitie(max);
    refac(p);
    return 0;
}