Pagini recente » Cod sursa (job #2400579) | Cod sursa (job #869754) | Cod sursa (job #219073) | Cod sursa (job #3202010) | Cod sursa (job #806586)
Cod sursa(job #806586)
#include <cstdio>
#include <cstdlib>
#include <ctime>
const int MAX_SIZE(3000001);
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 + 1), *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]);
std::fclose(stdout);
}
int partition (int left, int right)
{
int pivot(v[left + rand() % (right - left + 1)]), i(left - 1), j(right + 1), temp;
while (true)
{
++i;
while (v[i] < pivot)
++i;
--j;
while (v[j] > pivot)
--j;
if (i < j)
{
temp = v[i];
v[i] = v[j];
v[j] = temp;
}
else
break;
}
return j;
}
void order_statistic (int left, int right, int k)
{
if (left == right)
return;
int pivot_index(partition(left,right)), t(pivot_index - left + 1);
if (t >= k)
order_statistic(left,pivot_index,k);
else
order_statistic(pivot_index + 1,right,k - t);
}
int main (void)
{
std::srand(std::time(0));
read();
order_statistic(1,n,k);
print();
return 0;
}