Pagini recente » Cod sursa (job #2999871) | Cod sursa (job #2126269) | Cod sursa (job #735428) | Cod sursa (job #862602) | Cod sursa (job #3133872)
#include <fstream>
#include <vector>
std::ifstream fin("sdo.in");
std::ofstream fout("sdo.out");
int n, k;
std::vector<int> arr;
int partition(std::vector<int>& arr, int left, int right){
int x = arr[right], i = left;
for(int j = left; j < right; j++){
if(arr[j] <= x){
std::swap(arr[i], arr[j]);
i ++;
}
}
std::swap(arr[i], arr[right]);
return i;
}
int kthSmallest(std::vector<int>& arr, int left, int right, int k){
if(k > 0 && k <= right - left + 1){
int index = partition(arr, left, right);
if(index - left == k - 1){
return arr[index];
}
if(index - left > k - 1){
return kthSmallest(arr, left, index - 1, k);
}
return kthSmallest(arr, index + 1, right, k - index + left - 1);
}
return 0;
}
int main(){
fin >> n >> k;
arr = std::vector<int> (n);
for(int i = 0; i < n; i++){
fin >> arr[i];
}
fout << kthSmallest(arr, 0, n - 1, k);
}