Pagini recente » Cod sursa (job #2597935) | Cod sursa (job #2977848) | Cod sursa (job #2286141) | Cod sursa (job #2681212) | Cod sursa (job #1469640)
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MAX 3000005
using namespace std;
int n, k, i, v[MAX];
int partition(int s, int d);
void sdo(int s, int d, int k);
int main(){
srand(time(NULL));
freopen("sdo.in", "r", stdin);
freopen("sdo.out", "w", stdout);
scanf("%d%d", &n, &k);
for(i = 1; i <= n; i++)
scanf("%d", &v[i]);
sdo(1, n, k);
printf("%d", v[k]);
return 0;
}
int partition(int s, int d){
int i = s, j = d;
int pivot = v[s + rand() % (d - s + 1)];
while(i < j){
while(v[i] < pivot && i < d)
i++;
while(v[j] > pivot && j > s)
j--;
if(i <= j){
swap(v[i], v[j]);
i--;
j--;
}
}
return j;
}
void sdo(int s, int d, int k){
if(s == d)
return;
int p = partition(s, d);
int nr = p - s + 1;
if(nr >= k)
sdo(s, p, k);
else
sdo(p + 1, d, k - nr);
}