Pagini recente » Cod sursa (job #78597) | Cod sursa (job #1703609) | Cod sursa (job #254386) | Cod sursa (job #2330139) | Cod sursa (job #695323)
Cod sursa(job #695323)
#include<fstream>
#include<ctime>
#include<algorithm>
using namespace std;
ifstream in ("sdo.in");
ofstream out ("sdo.out");
const int N = 3000005;
int a[N], n, k;
void citire() {
in >> n >> k;
for (int i = 1; i <= n; ++i)
in >> a[i];
}
int prelucrare(int left, int right) {
int st = left, dr = right, pivot = a[left + (rand() % (right - left + 1) )];
while(true) {
while (st <= right && a[st] < pivot)
++st;
while (dr >= left && a[dr] > pivot)
--dr;
if (st < dr)
swap(a[st], a[dr]);
else
return dr;
}
return 0;
}
void quicksort(int left, int right, int k) {
if(left >= right)
return;
int poz = prelucrare(left, right);
int p = poz - left + 1;
if (p >= k)
quicksort(left, poz, k);
else
quicksort(poz + 1, right, k - p);
}
int main() {
srand(time(0));
citire();
quicksort(1, n, k);
out << a[k];
return 0;
}