Cod sursa(job #3326631)

Utilizator calinulCalin Cernat calinul Data 29 noiembrie 2025 17:57:20
Problema Statistici de ordine Scor 90
Compilator c-64 Status done
Runda Arhiva educationala Marime 1.05 kb
#include <stdio.h>
#include <ctype.h>

#define NMAX 3000000

int v[NMAX];

FILE *fin, *fout;

int rInt() {
  int rez = 0, ch;
  while ( !isdigit( ch = fgetc( fin ) ) );
  do
    rez = rez * 10 + ch - '0';
  while ( isdigit( ch = fgetc( fin ) ) );
  return rez;
}

static inline void swap( int *a, int *b ) {
  int aux = *a;
  *a = *b;
  *b = aux;
}

int kThElm( int v[], int begin, int end, int k ) {
  int b = begin - 1, e = end + 1, p = v[(begin + end) / 2];

  while ( v[++b] < p );
  while ( v[--e] > p );

  while ( b < e ) {
    swap( &v[b], &v[e] );

    while ( v[++b] < p );
    while ( v[--e] > p );
  }

  if ( e == k )
    return v[e];
  if ( e < k )
    return kThElm( v, e + 1, end, k );
  return kThElm( v, begin, e, k );
}

int main() {
  int n, k, i;

  fin = fopen( "sdo.in", "r" );
  n = rInt(), k = rInt();
  for ( i = 0; i < n; i++ )
    v[i] = rInt();
  fclose( fin );

  fout = fopen( "sdo.out", "w" );
  fprintf( fout, "%d\n", kThElm( v, 0, n - 1, k - 1 ) );
  fclose( fout );

  return 0;
}