Pagini recente » Cod sursa (job #430689) | Cod sursa (job #2673510) | Cod sursa (job #1183801) | Cod sursa (job #2850378) | Cod sursa (job #1367511)
#include <iostream>
#include <fstream>
#include <ctime>
#include <cstdlib>
#define nmax 3000005
using namespace std;
int n, k;
int A[nmax];
int q(int lo, int hi) {
int i = lo, j = hi;
int pivot = A[lo + rand() % (j - i + 1)];
while (1) {
for (; A[i] < pivot;) i++;
for (; A[j] > pivot;) j--;
if (i <= j)
swap(A[i++], A[j--]);
else
return j;
}
return 0;
}
void solve(int lo, int hi, int k) {
if (lo == hi)
return;
int pos = q(lo, hi);
int length = pos - lo + 1;
if (length >= k)
solve(lo, pos, k);
else
solve(pos+1, hi, k-length);
}
int main() {
ifstream fin("sdo.in");
ofstream fout("sdo.out");
srand(time(0));
fin >> n >> k;
for (int i = 1; i <= n; i++)
fin >> A[i];
solve(1, n, k);
fout << A[k] << "\n";
fin.close();
fout.close();
return 0;
}