Pagini recente » Cod sursa (job #2291477) | Cod sursa (job #1631069) | Cod sursa (job #529526) | Cod sursa (job #1074063) | Cod sursa (job #806521)
Cod sursa(job #806521)
#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)
{
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;
}
}
if (k < i)
order_statistic(left,i - 1,k);
else if (k > i)
order_statistic(i + 1,right,k);
}
int main (void)
{
std::srand(std::time(0));
read();
order_statistic(0,n - 1,k - 1);
print();
return 0;
}