Pagini recente » Cod sursa (job #1638107) | Cod sursa (job #1314330) | Cod sursa (job #1126605) | Cod sursa (job #640034) | Cod sursa (job #806547)
Cod sursa(job #806547)
#include <cstdio>
#include <cstdlib>
#include <ctime>
const int MAX_SIZE(3000000);
int v [MAX_SIZE];
int n, k;
inline void read (void)
{
std::freopen("sdo.in","r",stdin);
std::scanf("%d%d",&n,&k);
for (int *iterator(v), *end(v + n) ; iterator < end ; ++iterator)
std::scanf("%d",iterator);
std::fclose(stdin);
}
inline void print (void)
{
std::freopen("sdo.out","w",stdout);
std::printf("%d\n",v[k - 1]);
std::fclose(stdout);
}
void order_statistic (int left, int right, int k)
{
if (left == right)
return;
int pivot(v[left + std::rand() % (right - left + 1)]), i(left), j(right), temp;
while (i < j)
{
while (v[i] < pivot)
++i;
while (v[j] > pivot)
--j;
if (i < j)
{
temp = v[i];
v[i] = v[j];
v[j] = temp;
++i;
--j;
}
}
temp = j - left;
if (temp >= k)
order_statistic(left,j,k);
else
order_statistic(j + 1,right,k - temp - 1);
}
int main (void)
{
std::srand(std::time(0));
read();
order_statistic(0,n - 1,k - 1);
print();
return 0;
}