Pagini recente » Cod sursa (job #2630344) | Cod sursa (job #449300) | Cod sursa (job #1588712) | Cod sursa (job #342215) | Cod sursa (job #1884150)
#include<cstdio>
#include<ctime>
#include<algorithm>
using namespace std;
int N, K, myArray[1 << 22];
int RandomizedLomutoPartition(int sequence[], int left, int right)
{
int index = left + rand() % (right - left + 1);
int pivot = sequence[index];
swap(sequence[index], sequence[right]);
index = right;
int i = left - 1;
for(int j = left; j < right; j++){
if(sequence[j] <= pivot){
i++;
swap(sequence[i], sequence[j]);
}
}
swap(sequence[i+1], sequence[index]);
return i + 1;
}
int OrderStatistic(int sequence[], int left, int right, int k){
while(1){
int position = RandomizedLomutoPartition(sequence, left, right);
if(position + 1 == k) return sequence[position];
else if(k < position) right = position - 1;
else if(k > position) left = position + 1;
}
}
int main() {
freopen("sdo.in", "r", stdin);
freopen("sdo.out", "w", stdout);
scanf("%d %d", &N, &K);
for(int i = 0; i < N; i++){
scanf("%d", &myArray[i]);
}srand(time(NULL));
printf("%d", OrderStatistic(myArray, 0, N - 1, K));
return 0;
}