Cod sursa(job #2518186)

Utilizator euyoTukanul euyo Data 5 ianuarie 2020 11:51:12
Problema Statistici de ordine Scor 50
Compilator c-64 Status done
Runda Arhiva educationala Marime 0.84 kb
#include <stdio.h>
#include <stdlib.h>

int v[3000000];

int main() {
  FILE *fin = fopen( "sdo.in", "r" );
  FILE *fout = fopen( "sdo.out", "w" );
  int n, k, i, st, dr, pivotVal, b, e, aux;

  fscanf( fin, "%d%d", &n, &k );
  --k;
  for ( i = 0; i < n; ++i ) {
    fscanf( fin, "%d", &v[i] );
  }
  st = 0;
  dr = n - 1;
  while ( dr > st ) {
    pivotVal = v[(dr + st) / 2];
    b = st;
    e = dr;
    while ( b < e ) {
      while ( v[b] < pivotVal ) {
        ++b;
      }
      while ( v[e] > pivotVal ) {
        --e;
      }
      if ( b < e ) {
        aux = v[b];
        v[b] = v[e];
        v[e] = aux;
        ++b;
        --e;
      }
    }
    if ( k <= e ) {
      dr = e;
    } else {
      st = e + 1;
    }
  }
  fprintf( fout, "%d", v[k] );
  fclose( fin );
  fclose( fout );
  return 0;
}