Pagini recente » Cod sursa (job #252163) | Cod sursa (job #106410) | Cod sursa (job #3155567) | Cod sursa (job #1976059) | Cod sursa (job #2795194)
#include <iostream>
#include <fstream>
#include <cstdlib>
#define NMAX 3000000
using namespace std;
ifstream fin("sdo.in");
ofstream fout("sdo.out");
int n, k;
int v[NMAX];
int partitie(int st, int dr)
{
int pivot = v[st + rand() % (dr - st + 1)];
int i = st - 1, j = dr + 1, tmp;
while (1) {
do
i++;
while (v[i] < pivot);
do
j--;
while (v[j] > pivot);
if (i >= j)
return j;
tmp = v[i], v[i] = v[j], v[j] = tmp;
}
}
int quickSelect(int k, int st, int dr)
{
if (st == dr) return v[st];
int pivot = partitie(st, dr);
if (k <= pivot) return quickSelect(k, st, pivot);
else return quickSelect(k, pivot + 1, dr);
}
int main()
{
fin >> n >> k;
for (int i = 0; i < n; ++i) fin >> v[i];
fout << quickSelect(k - 1, 0, n - 1);
fin.close();
fout.close();
return 0;
}