Cod sursa(job #2291360)

Utilizator lflorin29Florin Laiu lflorin29 Data 27 noiembrie 2018 22:01:41
Problema Statistici de ordine Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.72 kb
#include <bits/stdc++.h>

using namespace std;

const int N = 3e6 + 2;

int n, k, a[N];

int partitie(int st, int dr) {
  int pivot = a[dr], i = st;
  for(int j = st; j < dr; ++j) {
    if(a[j] <= pivot) {
      swap(a[i], a[j]);
      ++i;
    }
  }
  swap(a[i], a[dr]);
  return i;
}

void klea(int st, int dr, int kk) {
  if(st == dr) return;
  int pivot = st + rand() % (dr - st + 1);
  swap(a[pivot], a[dr]);
  int poz = partitie(st, dr);
  if(poz - st + 1 >= kk)
    return klea(st, poz, kk);
  return klea(poz + 1, dr, kk - (poz - st + 1));

}


int main() {
  ifstream cin("sdo.in");
  ofstream cout("sdo.out");
  cin >> n>>k;
  srand(time(0));
  for(int i = 1; i <= n; ++i)
    cin >> a[i];
  klea(1,n,k);
  cout<<a[k];

}