Pagini recente » Cod sursa (job #1293452) | Cod sursa (job #2336534) | Cod sursa (job #512321) | Cod sursa (job #1895727) | Cod sursa (job #2276829)
#include <bits/stdc++.h>
using namespace std;
ifstream in("sdo.in");
ofstream out("sdo.out");
int n, k, a[3000100], aux[3000100];
int dive(int st, int dr) {
if (st == dr)
return a[st];
int piv = rand() % (dr - st + 1) + st;
piv = a[piv];
int l = st, r = dr;
for (int i = st; i <= dr; i++)
if (a[i] < piv)
aux[l++] = a[i];
else if (a[i] > piv)
aux[r--] = a[i];
for (int i = st; i <= dr; i++)
if (a[i] == piv)
aux[l++] = a[i];
for (int i = 1; i <= n; i++)
a[i] = aux[i];
r++;
l--;
if (l == k)
return aux[l];
if (l < k)
return dive(l + 1, dr);
return dive(st, l - 1);
}
int main() {
ios_base::sync_with_stdio(0);
in.tie(NULL);
srand(time(NULL));
in >> n >> k;
for (int i = 1; i <= n; i++)
in >> a[i];
out << dive(1, n);
return 0;
}