Cod sursa(job #2694171)

Utilizator TghicaGhica Tudor Tghica Data 8 ianuarie 2021 13:14:12
Problema Subsir crescator maximal Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.85 kb
#include <stdio.h>
#define NMAX 100000

int v[NMAX + 1], d[NMAX + 1], pv[NMAX + 1], sol[NMAX + 1];

int main() {
  FILE *fin, *fout;
  fin = fopen("scmax.in", "r");
  fout = fopen("scmax.out", "w");
  int n, i, j, max1, pm, rez, prez, poz, nsol;
  fscanf(fin, "%d", &n);
  for (i = 0; i < n; i++)
    fscanf(fin, "%d", &v[i]);
  rez = 0;
  for (i = 0; i < n; i++) {
    pm = -1;
    d[i] = 1;
    for (j = 0; j < i; j++)
      if (v[j] < v[i]) {
        if (d[j] + 1 > d[i]) {
          d[i] = d[j] + 1;
          pm = j;
        }
      }
    pv[i] = pm;
    if (d[i] > rez) {
      rez = d[i];
      prez = i;
    }
  }
  fprintf(fout, "%d\n", rez);
  poz = prez;
  nsol = 0;
  while (poz != -1) {
    sol[nsol++] = v[poz];
    poz = pv[poz];
  }
  for (i = nsol - 1; i >= 0; i--)
    fprintf(fout, "%d ", sol[i]);
  return 0;
}