Cod sursa(job #2944547)

Utilizator andreic06Andrei Calota andreic06 Data 22 noiembrie 2022 17:38:30
Problema Statistici de ordine Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.88 kb
#include <bits/stdc++.h>

using namespace std;
const int NMAX = 4e6;

unsigned int input[1 + NMAX]; int n, k;
void quick_select (int left, int right) {
   int lp = left, rp = right;
   int pivot = left + rand () % (right - left + 1);

   while (input[lp] < input[pivot])
      lp ++;
   while (input[rp] > input[pivot])
      rp --;

   while (lp < rp) {
      swap (input[lp], input[rp]);
      do
        lp ++;
      while (input[lp] < input[pivot]);

      do
        rp --;
      while (input[rp] > input[pivot]);
   }

   if (k < pivot)
     quick_select (left, pivot);
   if (pivot < k)
     quick_select (pivot, right);
}
int main()
{
   ifstream in ( "statisticiordine.in");
   ofstream out ( "statisticiordine.out");
   in >> n >> k;
   for (int i = 1; i <= n; i ++)
      in >> input[i];
   quick_select (1, n);
   out << input[k];
    return 0;
}