Pagini recente » Cod sursa (job #1252939) | Cod sursa (job #456842) | Cod sursa (job #2743580) | Cod sursa (job #2324265) | Cod sursa (job #941186)
Cod sursa(job #941186)
#include <fstream>
using namespace std;
int main()
{
ifstream fin("sdo.in");
ofstream fout("sdo.out");
int n, k;
fin >> n >> k;
int a[n];
for (int i = 0; i < n; ++i)
fin >> a[i];
int l = 0, r = n-1;
while (true) {
swap(a[(l+r)/2],a[r]);
int pivot = a[r];
int i(l-1), j(r), p(l), q(r-1);
while (true) {
while (a[++i] < pivot);
while (a[--j] > pivot && j >= i);
if (i >= j) break;
swap(a[i],a[j]);
if (a[i] == pivot) swap(a[p++],a[i]);
if (a[j] == pivot) swap(a[q--],a[j]);
}
if (k <= i-p) {
l = p;
r = i-1;
}
else if (k > i+r-q-l) {
k -= i+r-q-l;
l = i;
r = q;
}
else {
fout << pivot;
break;
}
}
return 0;
}