Cod sursa(job #2627580)

Utilizator euyoTukanul euyo Data 11 iunie 2020 13:44:05
Problema Subsir crescator maximal Scor 65
Compilator c-64 Status done
Runda Arhiva educationala Marime 0.74 kb
#include <stdio.h>

int d[100000];

int cautbin( int n, int e ) {
  int st = 0, dr = n, mij;
  
  while ( dr - st > 1 ) {
    mij = (st + dr) / 2;
    if ( d[mij] > e ) {
      dr = mij;
	} else {
      st = mij;
    }	
  }
  return st;
}

int main() {
  FILE *fin = fopen( "scmax.in", "r" );
  FILE *fout = fopen( "scmax.out", "w" );
  int n, i, a, len, p;

  fscanf( fin, "%d%d", &n, &a );
  len = 0;
  d[len++] = a;
  for ( i = 0; i < n; ++i ) {
	fscanf( fin, "%d", &a );
    if ( a > d[len - 1] ) {
	  d[len++] = a;
	} else {
	  p = cautbin( len, a );
	  if ( d[p] < a ) {
		++p;
	  }
	  d[p] = a;
	}
  }
  fprintf( fout, "%d\n", len );
  for ( i = 0; i < len; ++i ) {
	fprintf( fout, "%d ", d[i] );
  }
  fclose( fin ); 
  fclose( fout );
  return 0;
}