Cod sursa(job #2985797)

Utilizator etohirseCristi Cretu etohirse Data 27 februarie 2023 09:01:04
Problema Subsir crescator maximal Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.71 kb
#include <fstream>
#include <iostream>

using namespace std;

ifstream fin("scmax.in");
ofstream fout("scmax.out");

const int maxN = 100000;

int a[maxN + 1], n;
int L[maxN + 1];
int urm[maxN + 1];

int lmax;

int main() {
  fin >> n;
  for (int i = 1; i <= n; ++i) {
    fin >> a[i];
  }

  L[n] = 1;
  urm[n] = -1;
  for (int i = n - 1; i; --i) {
    L[i] = 1;
    urm[i] = -1;
    for (int j = i + 1; j <= n; ++j)
      if (a[i] < a[j] && L[i] < L[j] + 1) { L[i] = L[j] + 1, urm[i] = j;
  }}

  int ans = 1;
  for (int i = 2; i <= n; ++i) {
    if (L[i] > L[ans]) {
      ans = i;
    }
  }

  fout << L[ans] << '\n';
  cerr << L[ans];
  
  int k = ans;
  
  do {
    fout << a[k] << ' ';
    k = urm[k];
  } while (k != -1);
}