Cod sursa(job #3326964)

Utilizator ultra980Alex Stan ultra980 Data 1 decembrie 2025 16:00:14
Problema Statistici de ordine Scor 90
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.78 kb
#include <fstream>

const int MAXN = 3e6;
int arr[MAXN];

void qsel(int begin, int end, int poz) {
  int b = begin, e = end, pivot = arr[(begin + end) / 2];
  while (arr[b] < pivot)
    ++b;
  while (arr[e] > pivot)
    --e;
  while (b < e) {
    arr[b] ^= arr[e];
    arr[e] ^= arr[b];
    arr[b] ^= arr[e];
    do
      ++b;
    while (arr[b] < pivot);
    do
      --e;
    while (arr[e] > pivot);
  }
  if (begin < e && poz < e)
    qsel(begin, e, poz);
  else if (e + 1 < end)
    qsel(e + 1, end, poz);
} 

int main() {
  std::ifstream fin;
  std::ofstream fout;
  int n, k, i;

  fin.open("sdo.in");
  fin >> n >> k;
  for (i = 0; i < n; ++i) {
    fin >> arr[i];
  }
  fin.close();

  qsel(0, n - 1, k - 1);

  fout.open("sdo.out");
  fout << arr[k - 1] << '\n';
  fout.close();

  return 0;
}