Pagini recente » Cod sursa (job #1478880) | Cod sursa (job #1987897) | Cod sursa (job #1557393) | Cod sursa (job #5037) | Cod sursa (job #2564887)
#include <bits/stdc++.h>
using namespace std;
ifstream f("sdo.in");
ofstream g("sdo.out");
const int NMAX = 3e6 + 5;
int N, K, A[NMAX];
static inline void Read ()
{
f.tie(NULL);
srand(time(NULL));
f >> N >> K;
for(int i = 1; i <= N; ++i)
f >> A[i];
return;
}
static inline int Partitie (int Left, int Right)
{
int i = Left - 1, j = Right + 1, p = A[Left + (rand() % (Right - Left + 1))];
for( ; ; )
{
do
{
++i;
}
while(A[i] < p);
do
{
--j;
}
while(p < A[j]);
if(i < j)
swap(A[i], A[j]);
else
return j;
}
return 0;
}
static inline int k_th_element (int Left, int Right, int k)
{
if(Left == Right)
return A[Left];
int q = Partitie(Left, Right);
int t = q - Left + 1;
if(t >= k)
return k_th_element(Left, q, k);
return k_th_element(q + 1, Right, k - t);
}
int main()
{
Read();
g << k_th_element(1, N, K) << '\n';
return 0;
}