Cod sursa(job #2218078)

Utilizator Iulia25Hosu Iulia Iulia25 Data 3 iulie 2018 12:29:30
Problema Subsir crescator maximal Scor 35
Compilator cpp Status done
Runda Arhiva educationala Marime 0.82 kb
#include <fstream>
#include <vector>
#include <unordered_map>

using namespace std;

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

int n, a, x, maxim, maxi;
vector <int> v;
unordered_map <int, int> nex, init, b;

int main()  {
  fin >> n;
  for (int i = 0; i < n; ++i)  {
    fin >> a;
    x = (lower_bound(v.begin(), v.end(), a) - v.begin());
    if (x >= i || v[x] != a)  {
      v.emplace(v.begin() + x, a);
      init[a] = a;
      for (int j = x; j >= 0; --j) {
        if (b[a] <= b[v[j]]) {
          b[a] = b[v[j]] + 1;
          nex[v[j]] = a;
          init[a] = init[v[j]];
        }
      }
      if (b[a] > maxim) {
        maxim = b[a];
        maxi = init[a];
      }
    }
  }
  fout << maxim << '\n';
  fout << maxi << ' ';
  while (maxi != nex[maxi]) {
    maxi = nex[maxi];
    fout << maxi << ' ';
  }
}