Pagini recente » Cod sursa (job #2100635) | Cod sursa (job #1601639) | Cod sursa (job #446664) | Cod sursa (job #3273514) | Cod sursa (job #1492371)
#include <iostream>
#include <stdio.h>
#include <vector>
#include <stdlib.h>
#include <time.h>
#define MAX 3000001
using namespace std;
int nums[MAX];
int partition(int left, int right){
int r = rand() % (right - left + 1);
int pivot = left + r;
swap(nums[pivot], nums[left]);
int el = nums[left];
int i = left+1, j = right;
while(i <= j){
if (nums[i] <= el) i++;
if (nums[j] > el) j--;
if (i < j){
swap(nums[i], nums[j]);
}
}
swap(nums[left], nums[j]);
return j;
}
int main(){
freopen("sdo.in", "r", stdin);
freopen("sdo.out", "w", stdout);
int N, K;
srand(time(NULL));
scanf("%d%d", &N, &K);
K--;
srand(time(NULL));
for(int i = 0; i < N; i++){
scanf("%d", &nums[i]);
}
if (N == 0) return 0;
int left = 0, right = N-1, idx;
do {
idx = partition(left, right);
if (idx < K)
left = idx + 1;
else
right = idx - 1;
}while(idx != K);
printf("%d", nums[idx]);
return 0;
}