Cod sursa(job #2415093)

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

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

vector <long long> v [ NMAX ] ;

long long bs (long long x, long long n) {
  long long 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" ) ;
  long long n, elem, l, i, j, maxim, poz ;
  fscanf (fin, "%lld", &n ) ;
  l = 0 ;
  for (i = 0 ; i < n ; i++ ) {
    fscanf (fin, "%lld", &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, "%lld\n", maxim ) ;
  for (i = 0 ; i < v[poz].size() ; i++ )
    fprintf (fout, "%lld ", v[poz][i] ) ;
  return 0;
}