Pagini recente » Cod sursa (job #3178158) | Cod sursa (job #67154) | Cod sursa (job #2949738) | Cod sursa (job #2294303) | Cod sursa (job #3274598)
#include <fstream>
#include <iostream>
using namespace std;
ifstream fin ("sdo.in");
ofstream fout ("sdo.out");
const int NMAX = 3000000;
int arr[NMAX + 5];
int partition(int left, int right) {
int pivot = arr[right];
int i = left;
for (int j = left; j < right; j++) {
if (arr[j] <= pivot) {
swap(arr[i], arr[j]);
i++;
}
}
swap(arr[i], arr[right]);
return i;
}
int quick_select(int left, int right, int k) {
if (left == right)
return arr[left];
int pivot_index = partition(left, right);
int order = pivot_index - left + 1;
if (order == k)
return arr[pivot_index];
else if (order > k)
return quick_select(left, pivot_index - 1, k);
else
return quick_select(pivot_index + 1, right, k - order);
}
int main() {
int n, k;
fin >> n >> k;
for (int i = 0; i < n; i++)
fin >> arr[i];
fout << quick_select(0, n - 1, k) << endl;
return 0;
}