Pagini recente » Cod sursa (job #237606) | Cod sursa (job #2757411) | Cod sursa (job #588562) | Cod sursa (job #500349) | Cod sursa (job #894817)
Cod sursa(job #894817)
#include <fstream>
#include <ctime>
#include <cstdlib>
using namespace std;
#define MAX_N 3000005
ifstream fin ("sdo.in");
ofstream fout ("sdo.out");
int A[MAX_N], N, K;
void citire(){
fin >> N >> K;
for(int i = 1; i <= N; ++i)
fin >> A[i];
}
int part(int A[MAX_N], int st, int dr){
int i = st-1, j = dr+1, p = A[st + (rand()%(dr-st+1))];
while(1){
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;
}
void sort(int st, int dr, int k){
if(st == dr)
return;
int q = part(A, st, dr);
int t = q-st+1;
if(t >= k)
sort(st, q, k);
else
sort(q+1, dr, k-t);
}
int main()
{
srand(time(NULL));
citire();
sort(1, N, K);
fout << A[K] << "\n";
}