Cod sursa(job #2720496)

Utilizator isa_tudor_andreiAndrei Tudor isa_tudor_andrei Data 10 martie 2021 21:41:30
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.91 kb
#include <bits/stdc++.h>

using namespace std;

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

const int NMAX = 100000;

int nr, v[NMAX + 1], L[NMAX + 1], best[NMAX + 1], pred[NMAX + 1];

int bs( int x ) {
  int r = 0;
  int pas = 1<<20;
  while( pas ) {
    pas /= 2;
    if( r + pas <= nr && v[L[r + pas]] < x )
      r += pas;
  }
  return r;
}

void rec( int i ) {
  if( i == 0 )
    return ;
  rec(pred[i]);
  fout<<v[i]<<" ";
}

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

    int start, maxim = 0;
    for( int i = 1; i <= n; i ++ ) {
      int p = bs(v[i]);
      L[p + 1] = i;
      best[i] = best[L[p]] + 1;
      pred[i] = L[p];
      if( nr < p + 1 )
        nr = p + 1;
      if( best[i] > maxim ) {
        maxim = best[i];
        start = i;
      }
    }

    fout<<maxim<<"\n";
    rec(start);
    return 0;
}