Pagini recente » Cod sursa (job #3293074) | Cod sursa (job #3293009) | Cod sursa (job #3294083) | Cod sursa (job #3293336) | Cod sursa (job #3274714)
#include <fstream>
using namespace std;
ifstream fin("sdo.in");
ofstream fout("sdo.out");
const int NMAX = 3000000;
int v[NMAX + 5];
int get_pivot(int left, int right)
{
int pivot = right;
int i = left;
for (int j = left; j < right; j++) {
if (v[j] < v[pivot]) {
swap(v[i], v[j]);
i++;
}
}
swap(v[i], v[pivot]);
return i;
}
int quick_select(int left, int right, int k)
{
if (left <= right) {
int pivot = get_pivot(left, right);
int index = pivot - left + 1;
if (index == k)
return v[pivot];
else if (index > k)
return quick_select(left, pivot - 1, k);
else
return quick_select(pivot + 1, right, k - index);
}
}
int main() {
int n, k;
fin >> n >> k;
for (int i = 1; i <= n; i++)
fin >> v[i];
fout << quick_select(1, n, k);
return 0;
}