Cod sursa(job #1018614)

Utilizator bghimisFMI Ghimis Bogdan bghimis Data 29 octombrie 2013 20:11:53
Problema Statistici de ordine Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 1.15 kb
#include <fstream>
#include <ctime>
#include <cstdlib>
#include <cstdio>
#include <vector>
using namespace std;

ifstream cin("sdo.in");
ofstream cout("sdo.out");

int n, v[3000000], k;

void swap( int &a, int &b ) {
    int aux = a;
    a = b;
    b = aux;
}
  
void qsort( int left, int right ) {
    if ( left >= right )
        return;
  
    int piv = v[left + rand() % ( right - left + 1 )], begin = left, end = right;
  
    while ( begin <= end ) {
        while ( v[begin] < piv )
            ++begin;
        while ( v[end] > piv )
            --end;
  
        if ( begin <= end ) {
            swap( v[begin], v[end] );
            ++begin;
            --end;
        }
    }
  
    if (k <= end)
      qsort( left, end );
    else
      qsort( begin, right );
}
  

int main()
{    
  srand(time(NULL));
  
  FILE *fin, *fout;
  fin = fopen( "sdo.in", "r" );

  fscanf( fopen( "sdo.in", "r" ), "%d%d", &n, &k );
    for ( int i = 0; i < n; ++i )
        fscanf( fin, "%d", &v[i] );

  qsort(1, n);

  fout = fopen( "sdo.out", "w" );
  fprintf( fout, "%d", v[k] );
  fclose( fout );

  return 0;
}