Pagini recente » Cod sursa (job #438999) | Cod sursa (job #493439) | Cod sursa (job #923773) | Cod sursa (job #2135986) | Cod sursa (job #2650583)
#include <bits/stdc++.h>
using namespace std;
#define NMAX 3000010
ifstream f("sdo.in");
ofstream g("sdo.out");
int v[NMAX], n, k;
int partitie(int v[], int li, int lf) // Lomuto Partitioning
{
int pivot = lf, i = li;
for (int j = li; j < lf; j++)
if (v[j] < v[pivot]) {
swap(v[j], v[i]);
i++;
}
swap(v[pivot], v[i]);
return i;
}
int random_pivot(int v[], int li, int lf) {
int n = rand();
int pivot = li + n % (lf - li + 1);
swap(v[pivot], v[lf]);
return partitie(v, li, lf);
}
int qckselect(int v[], int li, int lf, int k) {
if (li == lf)
return v[li];
int pivot = random_pivot(v, li, lf);
int poz = pivot - li + 1;
if (k <= poz)
return qckselect(v, li, pivot, k);
else
return qckselect(v, pivot + 1, lf, k - poz);
}
int main() {
f >> n >> k;
for (int i = 1; i <= n; i++)
f >> v[i];
g << qckselect(v, 1, n, k);
return 0;
}