Pagini recente » Cod sursa (job #3299712) | Cod sursa (job #2862599) | Cod sursa (job #759292) | Cod sursa (job #3308739) | Cod sursa (job #3344691)
#include <fstream>
#include <iomanip>
#include <algorithm>
int partitie(int *v, int st, int dr){
int pivotIndex = rand() % (dr - st + 1) + st;
std::swap(v[pivotIndex], v[dr]);
int pivot = v[dr];
int i = st - 1;
for(int j = st; j < dr; ++j){
if(v[j] <= pivot){
++i;
std::swap(v[i], v[j]);
}
}
std::swap(v[i + 1], v[dr]);
return (i + 1);
}
int kmin(int* v, int st, int dr, int k){
while(st <= dr){
int pivot = partitie(v, st, dr);
if(pivot == k - 1)
return v[pivot];
else if(pivot > k - 1)
dr = pivot - 1;
else
st = pivot + 1;
}
return -1;
}
int n, k;
int* v;
std::ifstream fin("sdo.in");
std::ofstream fout("sdo.out");
int main(){
srand(time(0));
fin >> n >> k;
v = new int[n];
for(int i = 0; i < n; ++i)
fin >> v[i];
fout << kmin(v, 0, n - 1, k);
}