Cod sursa(job #2330302)

Utilizator andreigasparoviciAndrei Gasparovici andreigasparovici Data 28 ianuarie 2019 10:57:41
Problema Statistici de ordine Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.76 kb
#include <fstream>
const int NMAX = 3000005;
int n, k, a[NMAX];
std::ifstream in("sdo.in");
std::ofstream out("sdo.out");

int partition(int left, int right, int pivot) {
  int pivotVal = a[pivot];
  std::swap(a[pivot], a[right]);
  int index = left;
  for (int i = left; i < right; ++i)
    if (a[i] < pivotVal)
      std::swap(a[index++], a[i]);
  std::swap(a[right], a[index]);
  return index;
}

int select(int left, int right, int k) {
  if (left == right)
    return a[left];
  int pivot = partition(left, right, (right + left) / 2);
  if (k == pivot)
    return a[k];
  return (k < pivot) ? select(left, pivot - 1, k) : select(pivot + 1, right, k);
}

int main() {
  in >> n >> k;
  for (int i = 1; i <= n; ++i)
    in >> a[i];
  out << select(1, n, k);
  return 0;
}