Pagini recente » Cod sursa (job #2691281) | Cod sursa (job #2358894) | Cod sursa (job #3278376) | Cod sursa (job #2813877) | Cod sursa (job #3145118)
#include <fstream>
#include <ctime>
#include <cstdio>
using namespace std;
ifstream fin("sdo.in");
ofstream fout("sdo.out");
inline void swap(int *a, int *b) {
int tmp = *a;
*a = *b;
*b = tmp;
}
inline int partition(int *A, int const &st, int const &dr) {
int lo = st - 1;
int hi = dr - 1;
for (int i = st; i <= hi; i++)
if (A[i] <= A[dr]) {
lo++;
swap(&A[i], &A[lo]);
}
swap(&A[lo + 1], &A[dr]);
return lo + 1;
}
inline int randomPartition(int *A, int const &st, int const &dr) {
srand(time(NULL));
int random = st + rand() % (dr - st + 1);
swap(&A[random], &A[dr]);
return partition(A, st, dr);
}
inline int quickSelect(int *A, int const &st, int const &dr, int const &k) {
int piv = randomPartition(A, st, dr);
if (piv == k)
return A[piv];
if (piv < k)
return quickSelect(A, piv + 1, dr, k);
return quickSelect(A, st, piv - 1, k);
}
int n, k, v[3000005];
int main() {
fin >> n >> k;
for (int i = 1; i <= n; i++) fin >> v[i];
fout << quickSelect(v, 1, n, k) << '\n';
fin.close();
fout.close();
return 0;
}