Pagini recente » Cod sursa (job #165624) | Cod sursa (job #1534851) | Cod sursa (job #890) | Monitorul de evaluare | Cod sursa (job #2024653)
#include <fstream>
#include <cstdlib>
#include <algorithm>
using namespace std;
ifstream fin("sdo.in");
ofstream fout("sdo.out");
int k,n,a[3000005];
void read() {
fin >> n >> k;
for(int i = 0; i < n; ++i)
fin >> a[i];
}
void partit(int l, int r, int &m, int &n) {
int i,j,k,x,p;
p = rand() % (r - l) + l;
x = a[p];
i = l;
j = l;
k = r;
while(j < k) {
if(a[j] == x)
++j;
else
if(a[j] < x) {
swap(a[j],a[i]);
++i;
++j;
}
else {
--k;
swap(a[j],a[k]);
}
}
m = i;
n = j;
}
int orderstat() {
int l = 0;
int r = n;
int m,n;
while(true) {
partit(l,r,m,n);
if(m <= k && k < n)
return a[m];
else
if(k < m)
r = m;
else
l = n;
}
}
int main()
{
read();
--k;
fout << orderstat();
return 0;
}