Pagini recente » Cod sursa (job #2659592) | Cod sursa (job #1697000) | Cod sursa (job #15349) | Cod sursa (job #60916) | Cod sursa (job #2572383)
#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 int Sol(int Arr[NMAX], int st, int dr, int k)
{
while(st <= dr) {
int pivIdx = partitie(Arr, st, dr);
if(pivIdx == k)
return A[pivIdx];
if(pivIdx > k)
dr = --pivIdx;
else
st = ++pivIdx;
}
return -1;
}
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];
int sol = Sol(A, 1, N, K);
cout << sol << "\n";
return 0;
}