Pagini recente » Cod sursa (job #2358790) | Cod sursa (job #753738) | Cod sursa (job #2466356) | Cod sursa (job #3240012) | Cod sursa (job #892157)
Cod sursa(job #892157)
#include <cstdio>
#include <cstdlib>
#include <ctime>
using namespace std;
#define Nmax 3000002
int N, K;
int v[Nmax];
void citire(){
freopen("sdo.in", "r", stdin);
scanf("%d %d", &N, &K);
for(int i = 1; i <= N; ++i)
scanf("%d", v + i);
srand(time(NULL));
fclose(stdin);
}
void swap(int &a, int &b){
int c = a;
a = b;
b = c;
}
int part(int st, int dr){
int min = st - 1, max = dr + 1, m = v[st + ( rand()%(dr - st + 1) )];
while(true){
do{
++min;
}while(v[min] < m);
do{
--max;
}while(m < v[max]);
if(min < max)
swap(v[min], v[max]);
else
return max;
}
return 0;
}
void sort(int st, int dr, int k){
if(st == dr)
return;
int q = part(st, dr);
int t = q - st + 1;
if(t >= k)
sort(st, q, k);
else
sort(q+1, dr, k-t);
}
void afis(){
freopen("sdo.out", "w", stdout);
printf("%d\n", v[K]);
fclose(stdout);
}
int main(){
citire();
citire();
sort(1, N, K);
afis();
return 0;
}