Pagini recente » Cod sursa (job #1896986) | Cod sursa (job #2832356) | Cod sursa (job #513100) | Cod sursa (job #1660469) | Cod sursa (job #3326799)
#include <fstream>
using namespace std;
ifstream fin("sdo.in");
ofstream fout("sdo.out");
#define MAXN 3000000
int v[MAXN];
int kth(int k, int be, int en){
int b, e, piv;
b = be;
e = en;
piv = v[b + rand() % (e - b + 1)];
while(v[b] < piv){
b++;
}
while(v[e] > piv){
e--;
}
while(b < e){
swap(v[b], v[e]);
do{
b++;
}while(v[b] < piv);
do{
e--;
}while(v[e] > piv);
}
if(be < e && k <= e){
kth(k, be, e);
}
else if(e + 1 < en){
kth(k, e + 1, en);
}
return v[k];
}
int main()
{
int n, k, i;
fin >> n >> k;
for(i = 0; i < n; i++){
fin >> v[i];
}
fout << kth(k - 1, 0, n - 1);
fin.close();
fout.close();
return 0;
}