Cod sursa(job #2415081)

Utilizator alex.cojocaruAlex Cojocaru alex.cojocaru Data 25 aprilie 2019 15:14:40
Problema Subsir crescator maximal Scor 20
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.03 kb
#include <iostream>
#include <vector>

#define KMAX 50000
#define NMAX 100000
#define MOD 20011
using namespace std;

vector <int> v [ NMAX ] ;

int bs (int x, int n) {
  int mid, st, dr ;
  st = 0 ;
  dr = n ;
  while (st <= dr ) {
    mid = (st + dr ) / 2 ;
    if ( v[mid].size() > 0 && v[mid][v[mid].size()-1] >= x )
      st = mid + 1 ;
    else
      dr = mid - 1 ;
  }
  return st ;
}

int main() {

  FILE *fin, *fout ;
  fin = fopen ("scmax.in", "r" ) ;
  fout = fopen ("scmax.out", "w" ) ;
  int n, elem, l, sum, i, j, maxim, poz ;
  fscanf (fin, "%d", &n ) ;
  l = 0 ;
  for (i = 0 ; i < n ; i++ ) {
    fscanf (fin, "%d", &elem ) ;
    j = bs (elem, l ) ;
    if (j == l )
      l++;
    v[j].push_back(elem) ;
  }
  maxim = 0 ;
  poz = 0 ;
  for (i = 0 ; i <= l ; i ++ ) {
    if (v[i].size() > maxim ) {
      maxim = v[i].size() ;
      poz = i ;
    }
  }
  fprintf (fout, "%d\n", maxim ) ;
  for (i = 0 ; i < v[poz].size() ; i++ )
    fprintf (fout, "%d ", v[poz][i] ) ;
  return 0;
}