Pagini recente » Cod sursa (job #1102089) | Cod sursa (job #2611061) | Cod sursa (job #2504505) | Cod sursa (job #1753713) | Cod sursa (job #892133)
Cod sursa(job #892133)
#include <cstdio>
#include <cstdlib>
#include <ctime>
using namespace std;
#define Nmax 3000002
int N, K;
int v[Nmax];
void citire(){
freopen("sdo.inn", "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, max = dr, m = v[st + (rand()%(dr-st+1))];
while(true){
while(v[min] < m)
min++;
while(v[max] > m)
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;
}