Cod sursa(job #1342551)

Utilizator sonyedisonDorian Popa sonyedison Data 14 februarie 2015 10:59:45
Problema Subsir crescator maximal Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.21 kb
/*cand avem o problema cu vectori, subproblemele sale pot fi de
obicei formulate in urmatoarele 3 moduri:
1. PREFIX
    a1,a2,...,ai;
2. SUFIX
    ai,ai+1,...an;
3. Orice secventa
    ai,ai+1,...aj;

*/
#include <fstream>

#define IN "scmax.in"
#define OUT "scmax.out"

#define nmax 100001

using namespace std;

ifstream fin(IN);
ofstream fout(OUT);

int a[nmax],lg[nmax],urm[nmax];
int n;

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

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

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

void afisare(){
    int i,lgmax,imax;
    lgmax=lg[1];    imax=1;
    for(i=2;i<=n;i++)
        if(lgmax<lg[i]){
            lgmax=lg[i];
            imax=i;
            }
    fout<<lgmax<<endl;
    //reconst subsir;
    for(i=imax;i;i=urm[i])
        fout<<a[i]<<' ';
    fout<<endl;
}

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