Cod sursa(job #2661758)

Utilizator mihnea_buzoiuMihnea Buzoiu mihnea_buzoiu Data 22 octombrie 2020 17:44:30
Problema Subsir crescator maximal Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.95 kb
#include <stdio.h>
#include <string.h>

using namespace std;

int v[100001], l[100001], p[100001], f[100001];

int main()
{
    int n;
    FILE * fin = fopen("scmax.in", "r");
    FILE * fout = fopen("scmax.out", "w");
    fscanf(fin, "%d", &n);
    for (int i=0; i<n; i++)
        fscanf(fin, "%d", &v[i]);


    int lmax = 1, pmax = 0;
    for (int i=0; i<n; i++){
        p[i] = -1;
        l[i] = 1;
        for (int j=0; j<i; j++){
            if (v[j] < v[i] && l[i] < (l[j]+1)){
                l[i] = l[j]+1;
                p[i] = j;
            }
        }

        if (lmax < l[i]){
            lmax = l[i];
            pmax = i;
            //printf ("%d %d\n", lmax, pmax);
        }
    }

    fprintf(fout, "%d\n", lmax);
    for (int i=pmax; i>=0 && l[i]>0; i=p[i]){
        f[l[i] - 1] = v[i];
    }

    for (int i=0; i<lmax; i++)
        fprintf(fout, "%d ", f[i]);

    fclose(fin);
    fclose(fout);
}