Cod sursa(job #2616517)

Utilizator daru06Daria Culac daru06 Data 18 mai 2020 19:02:09
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.91 kb
#include <iostream>
#include <fstream>

using namespace std;

struct element {
  int val, lvp; // valoarea, locul vecinului preferat
};

ifstream fin("scmax.in");
ofstream fout("scmax.out");
int n, ns, a, lv, sol[100001], v[10001]; // varfuri
element e[100001];
bool gasita;

int main() {
  fin >> n;
  for (int i = 1; i <= n; i++) {
    fin >> a;
    gasita = false;
    for (int is = 1; is <= ns and not gasita; is++) {
      if (a <= e[v[is]].val) {
        v[is] = i; // locul in sirul initial al elementului din varful stivei
        e[i] = {a, v[is - 1]}; gasita = true;
      }
    }
    if (not gasita) {
      ns++; v[ns] = i; e[i] = {a, v[ns - 1]};
    }
  }
  lv = v[ns]; // locul vecinului preferat
  for (int is = ns; is >= 1; is--) {
    sol[is] = e[lv].val;
    lv = e[lv].lvp;
  }
  fout << ns << '\n';
  for (int i = 1; i <= ns; i++)
    fout << sol[i] << ' ';
  return 0;
}