Cod sursa(job #2696464)

Utilizator 2016Teo@Balan 2016 Data 15 ianuarie 2021 22:29:51
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.88 kb
#include <bits/stdc++.h>
using namespace std;
#define x1 "scmax.in"
#define x2 "scmax.out"
ifstream in(x1);
ofstream out(x2);
#define NMAX 100000
#define POW2 1 << 16
int v[NMAX], ls[NMAX], maxi[NMAX], mx, ans[NMAX];
int cautbin(int x) {
  int r = -1, pas;
  pas = POW2;
  while(pas > 0) {
    if(r + pas < mx && v[maxi[r + pas]] < x)
      r += pas;
    pas /= 2;
  }
  return r + 1;
}
void rasp(int poz) {
    if(poz != -1) {
        rasp(ls[poz]);
        out << v[poz] << " ";
    }
}
int main() {
    int n, i, j, ind;
    in >> n;
    for(i = 0; i < n; i++)
        in >> v[i];
    for(i = 0; i < n; i++) {
        ind = cautbin(v[i]);
        mx = max(mx, ind + 1);
        maxi[ind] = i;
        if(ind > 0)
            ls[i] = maxi[ind - 1];
        else
            ls[i] = -1;
    }
    out << mx << '\n';
    rasp(maxi[mx - 1]);
    return 0;
}