Cod sursa(job #2694635)

Utilizator Ana_22Ana Petcu Ana_22 Data 10 ianuarie 2021 10:50:01
Problema Subsir crescator maximal Scor 70
Compilator c-64 Status done
Runda Arhiva educationala Marime 1.06 kb
#include <stdio.h>
#include <stdlib.h>
#define NMAX 100000

FILE *fin, *fout;
int v[NMAX], s[NMAX], pred[NMAX];

void write( int p ) {
  if( p > -1 ) {
    write( pred[p] );
    fprintf( fout, "%d ", v[p] );
  }
}

int main() {
    int n, i, l, lmax, st, dr, mijl;
    fin = fopen( "scmax.in", "r" );
    fscanf( fin, "%d", &n );
    for( i = 0; i < n; i++ )
      fscanf( fin, "%d", &v[i] );
    fclose( fin );
    lmax = 0;
    for( i = 0; i < n; i++ ) {
      st = 0;
      dr = lmax - 1;
      while( dr - st > 1 ) {
        mijl = ( st + dr ) / 2;
        if( v[s[mijl]] > v[i] )
          dr = mijl;
        else
          st = mijl;
      }
      if( v[s[st]] < v[i] )
        st++;
      if( v[s[dr]] < v[i] )
        st = dr + 1;
      l = st;
      s[l] = i;
      if( l > 0 )
        pred[i] = s[l-1];
      else
        pred[i] = -1;
      if( l + 1 > lmax )
        lmax = l + 1;
    }
    fout = fopen( "scmax.out", "w" );
    fprintf( fout, "%d\n", lmax );
    write( s[lmax-1] );
    fclose( fout );
    return 0;
}