Cod sursa(job #2575270)

Utilizator isa_tudor_andreiAndrei Tudor isa_tudor_andrei Data 6 martie 2020 12:32:38
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.89 kb
#include <bits/stdc++.h>

using namespace std;

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

const int NMAX = 100000;

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

int bs( int x ) {
  int r = 0;
  int pas = 1<<29;
  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;
    int maxim = 0, start = 0;
    for( int i = 1; i <= n; i ++ ) {
      fin>>v[i];
      int poz = bs( v[i] );
      pred[i] = L[poz];
      best[i] = 1 + best[L[poz]];
      L[poz + 1] = i;
      if( poz + 1 > nr )
        nr = poz + 1;
      if( best[i] > maxim ) {
        maxim = best[i];
        start = i;
      }
    }
    fout<<maxim<<"\n";
    rec( start );
    return 0;
}