Pagini recente » Cod sursa (job #581952) | Cod sursa (job #2290995) | Cod sursa (job #1320406) | Cod sursa (job #2256550) | Cod sursa (job #1861866)
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 3e6;
int v[MAXN];
int part(int l, int r) {
int piv = v[l + rand() % (r - l + 1)], aux;
--l; ++r;
while (l < r) {
do {
++l;
} while (piv > v[l]);
do {
--r;
} while (piv < v[r]);
if (l < r) {
aux = v[l]; v[l] = v[r]; v[r] = aux;
}
}
return r;
}
void compute(int l, int r, int k) {
if (l < r) {
int p = part(l, r);
if (k <= p - l)
compute(l, p, k);
else
compute(p + 1, r, k - p + l - 1);
}
}
int main()
{
int n, k;
ifstream fin("sdo.in");
fin >> n >> k;
for (int i = 0; i < n; ++i)
fin >> v[i];
fin.close();
compute(0, n - 1, k - 1);
ofstream fout("sdo.out");
fout << v[k - 1] << '\n';
fout.close();
return 0;
}