Cod sursa(job #2679687)

Utilizator cristi_macoveiMacovei Cristian cristi_macovei Data 1 decembrie 2020 11:38:12
Problema Subsir crescator maximal Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.9 kb
#include <iostream>
#include <fstream>
#include <vector>

const int NMAX = 1e5;

int n;

int a[1 + NMAX];

int dp[1 + NMAX];

int prev[1 + NMAX];

void read() {
  std::ifstream in("scmax.in");

  in >> n;

  for (int i = 1; i <= n; ++i)
    in >> a[i];

  in.close();
}

int main() {
  read();

  dp[1] = 1;
  prev[1] = -1;

  for (int i = 2; i <= n; ++i) {
    dp[i] = 1;
    prev[i] = -1;

    for (int j = 1; j < i; ++j) {
      if (a[j] < a[i] && dp[j] + 1 > dp[i]) {
        dp[i] = dp[j] + 1;
        prev[i] = j;
      }
    }
  }

  int mx = -1, pos = -1;
  for (int i = 1; i <= n; ++i) {
    if (dp[i] > mx) {
      mx = dp[i];
      pos = i;
    }
  }

  std::vector<int> sol;

  while(pos != -1) {
    sol.push_back(a[pos]);
    pos = prev[pos];
  }

  std::ofstream out("scmax.out");
  out << mx << '\n';
  for (int i = (int)sol.size() - 1; i >= 0; --i)
    out << sol[i] << ' ';

  out.close();
  return 0;
}