Pagini recente » Cod sursa (job #248642) | Cod sursa (job #52042) | Cod sursa (job #1838025) | Cod sursa (job #2541915) | Cod sursa (job #695300)
Cod sursa(job #695300)
#include <fstream>
#include <ctime>
#include <cstdlib>
#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 a[], int left, int right) {
int st = left, dr = right, pivot = a[left + (rand() % (right - left + 1) )];
while(true) {
while (a[st] < pivot)
++st;
while (a[dr] > pivot)
--dr;
if (st < dr)
swap(a[st], a[dr]);
else
return dr;
}
return 0;
}
void quicksort(int a[], int left, int right, int k) {
if(left == right)
return;
int poz = prelucrare(a, left, right);
int p = poz - left + 1;
if (p >= k)
quicksort(a, left, poz, k);
else
quicksort(a, poz + 1, right, k - p);
}
int main() {
freopen("sdo.in", "r", stdin);
freopen("sdo.out", "w", stdout);
srand(time(0));
citire();
quicksort(a, 1, n, k);
out << a[k];
return 0;
}