Pagini recente » Cod sursa (job #881744) | Cod sursa (job #2221957) | Cod sursa (job #749083) | Cod sursa (job #2629871) | Cod sursa (job #3197538)
#include <fstream>
#include <time.h>
#include <cstdlib>
using namespace std;
ifstream in("sdo.in");
ofstream out("sdo.out");
const int N = 3e6 + 5;
int n, k, v[N];
int part(int left, int right) {
int i = left - 1, j = right + 1, piv = v[left + rand() % (right - left + 1)];
while(1) {
do {
i++;
} while(v[i] < piv);
do {
j--;
} while(piv < v[j]);
if(i < j)
swap(v[i], v[j]);
else return j;
}
}
void n_elm(int left, int right, int k) {
if(left == right)
return;
int p = part(left, right);
int q = p - left + 1;
if(q >= k)
n_elm(left, p, k);
else n_elm(p+1, right, k-q);
}
int main()
{
srand(time(NULL));
in >> n >> k;
for(int i=1; i<=n; i++)
in >> v[i];
n_elm(1, n, k);
out << v[k];
return 0;
}