Cod sursa(job #2383895)

Utilizator isa_tudor_andreiAndrei Tudor isa_tudor_andrei Data 19 martie 2019 21:08:53
Problema Statistici de ordine Scor 80
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.86 kb
#include <fstream>
#include <algorithm>
#include <ctime>
#define NMAX 3000001

using namespace std;

int v[NMAX];

int partitionare( int st, int dr) {
  int i, j;
  int pivot = v[st + (rand()%( dr - st + 1 ))];
  i = st;
  j = dr;
  while( i < j ) {
    while( v[i] < pivot )
      i ++;
    while( v[j] > pivot )
      j --;
    if( i < j )
      swap(v[i],v[j]);
  }
  return j;
}

void select( int st, int dr, int k ) {
   if( st == dr )
     return ;
   int poz = partitionare(st,dr);
   int length = poz - st + 1;
   if( length >= k )
     select(st,poz,k);
   else
     select(poz+1,dr,k-length);
}

int main() {
    ifstream fin("sdo.in");
    ofstream fout("sdo.out");
    int i, n, k;
    srand(time(NULL));
    fin>>n>>k;
    for( i = 1; i <= n; i ++ )
      fin>>v[i];
    select(1,n,k);
    fout<<v[k];
    return 0;
}