Cod sursa(job #2694156)

Utilizator YusyBossFares Yusuf YusyBoss Data 8 ianuarie 2021 12:31:00
Problema Subsir crescator maximal Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.06 kb
#include <iostream>
#include <stdio.h>
#define NMAX 100000

using namespace std;

int maxim(int a, int b) {
  return a > b ? a : b;
}

int v[NMAX + 1], dp[NMAX + 1], prev[NMAX + 1], vsol[NMAX + 1];

int main() {
  FILE *fin, *fout;
  int n, i, j, max1, pozmax, scmax, pozscmax, poz, nsol;

  fin = fopen("scmax.in", "r");
  fscanf(fin, "%d", &n);
  for (i = 0; i < n; i++)
    fscanf(fin, "%d", &v[i]);
  fclose( fin );

  scmax = 0;
  for (i = 0; i < n; i++) {
    pozmax = -1;
    dp[i] = 1;
    for (j = 0; j < i; j++)
      if (v[j] < v[i]) {
        if (dp[j] + 1 > dp[i]) {
          dp[i] = dp[j] + 1;
          pozmax = j;
        }
      }

    prev[i] = pozmax;


    if (dp[i] > scmax) {
      scmax = dp[i];
      pozscmax = i;
    }
  }

  fout = fopen("scmax.out", "w");
  fprintf(fout, "%d\n", scmax);
  poz = pozscmax;
  nsol = 0;
  while (poz != -1) {
    vsol[nsol++] = v[poz];
    poz = prev[poz];
  }

  for (i = nsol - 1; i >= 0; i--)
    fprintf(fout, "%d ", vsol[i]);

  fclose( fout );
  return 0;
}