Pagini recente » Cod sursa (job #788059) | Cod sursa (job #1746553) | Cod sursa (job #1851995) | Cod sursa (job #530891) | Cod sursa (job #2572335)
#include <bits/stdc++.h>
using namespace std;
const char* in = "sdo.in";
const char* out = "sdo.out";
const int NMAX = 1e6 * 3;
int N, A[NMAX], K;
inline int partitie(int Arr[NMAX], int st, int dr) {
int pivot = Arr[st + rand() % (dr - st + 1)],
i = st - 1,
j = dr + 1;
while(true) {
do{
++i;
}while(Arr[i] < pivot);
do{
--j;
}while(Arr[j] > pivot);
if(i >= j)
return j;
swap(Arr[i], Arr[j]);
}
}
inline void Sol(int Arr[NMAX], int st, int dr, int k)
{
if(st == dr)
return; //end process
int piv = partitie(Arr, st, dr);
int t = piv - st + 1;
if(t >= k)
Sol(Arr, st, piv, k);
else
Sol(Arr, piv + 1, dr, k - t);
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(0), cout.tie(0);
freopen(in, "r", stdin);
freopen(out, "w", stdout);
srand(time(NULL)); //set the seed
cin >> N >> K;
for(int i = 1; i <= N; ++i)
cin >> A[i];
Sol(A, 1, N, K);
cout << A[K] << "\n";
return 0;
}