Cod sursa(job #2674478)

Utilizator rapidu36Victor Manz rapidu36 Data 19 noiembrie 2020 11:58:32
Problema Subsir crescator maximal Scor 70
Compilator c-64 Status done
Runda Arhiva educationala Marime 1.1 kb
#include <stdio.h>
#include <stdlib.h>
#define N 100000

int v[N], l[N], n;
FILE *in, *out;

void subsir(int p)
{
    int i = p - 1;
    while (i >= 0 && (v[i] >= v[p] || l[i] != l[p] - 1))///n-am gasit predecesorul lui v[p]
    {
        i--;
    }
    if (i >= 0)
    {
        subsir(i);
    }
    fprintf(out, "%d ", v[p]);
}

int main()
{
    in = fopen("scmax.in", "r");
    out = fopen("scmax.out", "w");
    fscanf(in, "%d", &n);
    int i, j, imax = 0;
    for (i = 0; i < n; i++)
    {
        fscanf(in, "%d", &v[i]);
    }
    fclose(in);
    l[0] = 1;
    for (i = 1; i < n; i++)
    {
        int lc = 0;
        for (j = 0; j < i; j++)
        {
            if (v[j] < v[i])///pot sa-l adaug pe v[i] la subsiruri terminate pe poz j
            {
                if (l[j] > lc)
                {
                    lc = l[j];
                }
            }
        }
        l[i] = 1 + lc;
        if (l[i] > l[imax])
        {
            imax = i;
        }
    }
    fprintf(out, "%d\n", l[imax]);
    subsir(imax);
    fclose(out);
    return 0;
}