Cod sursa(job #1044634)

Utilizator paulhelmerPaul Helmer paulhelmer Data 30 noiembrie 2013 10:05:34
Problema Subsir crescator maximal Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.84 kb
#include <iostream>
#include <fstream>

using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.in");
int a[100000], b[100000], p[100000] , sol[100000];
int maxim(int a, int b) {if(a>b) return a; else return b;}
int main()
{
    int n, m=0, indice;
    f >> n;
    for(int i=1; i<=n; i++) f >> a[i];
    for(int i=1; i<=n; i++) b[i]=1;
    for(int i=1; i<=n; i++) p[i]=0;
    for(int i=1; i<=n; i++)
        for(int j=1; j<i; j++)
        {
            if(a[j] < a[i])
            {
                b[i]=maxim(b[i], b[j]+1);
                if(b[i]==b[j]+1) p[i]=j;
            }
        }
    for(int i=1; i<=n; i++) if(b[i]>m) m=b[i], indice=i;
    g << m <<"\n";
    for(int i=m; i>=1; i--)
    {
        sol[i]=a[indice];
        indice=p[indice];
    }
    for(int i=1; i<=m; i++) g << sol[i] <<" ";
    return 0;
}