Cod sursa(job #1088332)

Utilizator malina_floreaMalina Florea malina_florea Data 20 ianuarie 2014 14:40:05
Problema Subsir crescator maximal Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.12 kb
#include <fstream>
#define DMAX 100010
using namespace std;

ifstream fin ("scmax.in");
ofstream fout ("scmax.out");

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

int n;
int a[DMAX], Lg[DMAX], prec[DMAX], sir[DMAX];
int crt, lgmax;

int main()
{
    citire();
    pd();
    constr_sol();
    afisare();


    fin.close();
    fout.close();
    return 0;
}

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

void pd()
{
    int i, j;

    Lg[1]=1; prec[1]=0;
    for (i=2; i<=n; i++)
        {Lg[i]=1, prec[i]=0;
         for (j=1; j<i; j++)
              if (a[j]<a[i] && Lg[j]+1>Lg[i])
                 {Lg[i]=Lg[j]+1;
                  prec[i]=j;
                 }
        }
}

void constr_sol()
{
    int i, pozmax;

    for (i=1; i<=n; i++)
         if (lgmax<Lg[i])
             lgmax=Lg[i], pozmax=i;

    i=pozmax;
    crt=0;
    while(i)
         {sir[++crt]=a[i];
          i=prec[i];
         }
}

void afisare()
{
    int i;
    fout<< lgmax<< "\n";
    for (i=crt; i>=1; i--) fout<< sir[i]<< " ";
    fout<< "\n";
}