Pagini recente » Cod sursa (job #2095730) | Cod sursa (job #3220198) | Cod sursa (job #477926) | Rating Tudor Ciurca (2dor) | Cod sursa (job #3176990)
#include <bits/stdc++.h>
#define N 3000005
using namespace std;
ifstream f("sdo.in");
ofstream g("sdo.out");
int n, k, A[N];
int Part(int st, int dr) {
int pivot = rand() % (dr - st + 1) + st;
int x = A[pivot];
swap(A[dr], A[pivot]);
int j = st - 1;
for (int i = st; i <= dr; i++)
if (A[i] <= x)
swap(A[++j], A[i]);
return j;
}
int Quickselect(int st, int dr, int k) {
int poz = Part(st, dr);
if (k == poz)
return A[k];
else if (k < poz)
return Quickselect(st, poz - 1, k);
return Quickselect(poz + 1, dr, k);
}
int main() {
srand(time(NULL));
f>>n>>k;
for (int i = 1; i <= n; i++)
f>>A[i];
g<<Quickselect(1, n , k);
return 0;
}