Cod sursa(job #809185)

Utilizator AGrigoriuStefanGrigoriu Stefan AGrigoriuStefan Data 7 noiembrie 2012 23:32:32
Problema Subsir crescator maximal Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 0.89 kb
#include <fstream>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");

void citire();
void pd();
void afisare();

int n,lg[100001],lgmaxim[100001],urm[100001],maxim,poz;

int main()
{
citire();
pd();
afisare();
return 0;
}

void citire()
{
int i;
fin>>n;
for(i=1;i<=n;i++)
    fin>>lg[i];
}

void afisare()
{
int i;
maxim=lgmaxim[1];
poz=1;
for(i=2;i<=n;i++)
    if(maxim<lgmaxim[i])
        {
        maxim=lgmaxim[i];
        poz=i;
        }
fout<<maxim<<'\n';
i=poz;

while(i!=-1)
    {
    fout<<lg[i]<<' ';
    i=urm[i];
    }
}

void pd()
{
    int i,j;
    lgmaxim[n]=1;urm[n]=-1;
    for(i=n-1;i>=1;i--)
    {
    lgmaxim[i]=1; urm[i]=-1;
    for(j=i+1;j<=n;j++)
    if(lg[i]<lg[j])
        if(lgmaxim[i]<1+lgmaxim[j])
            {
            lgmaxim[i]=1+lgmaxim[j];
            urm[i]=j;
            }
    }
}