Pagini recente » Cod sursa (job #2752305) | Cod sursa (job #1608864) | Cod sursa (job #2737174) | Cod sursa (job #1785070) | Cod sursa (job #1833121)
#include <iostream>
#include <fstream>
#include <ctime>
#include <cstdlib>
using namespace std;
const int MAX = 3000000;
int v[MAX];
int quickselect(int a[], int left, int right, int k){
int piv = a[rand() % (right - left + 1) + left];
int i = left, j = right;
while(i <= j){
while(a[i] < piv){
i++;
}
while(a[j] > piv){
j--;
}
if(i <= j){
swap(a[i], a[j]);
i++;
j--;
}
}
if(i == k - 1){
return a[i];
}else if(i > k - 1){
return quickselect(a, left, i, k);
}else{
return quickselect(a, i + 1, right, k);
}
}
int main(){
ifstream fin("sdo.in");
ofstream fout("sdo.out");
int n, k;
fin >> n >> k;
for(int i = 0; i < n; i++){
fin >> v[i];
}
fout << quickselect(v, 0, n - 1, k);
fin.close();
fout.close();
return 0;
}