Pagini recente » Clasament 22_februarie_simulare_oji_2024_clasele_11_12 | Cod sursa (job #2888306) | Cod sursa (job #2325889) | Cod sursa (job #1801498) | Cod sursa (job #1851167)
#include <iostream>
#include <stdlib.h>
#include <time.h>
#include <stdio.h>
using namespace std;
int N, k;
int A[3000001];
void citire(){
scanf("%d %d", &N, &k);
for(int i=1; i<=N; i++)
scanf("%d", &(A[i]));
}
void afisare(){
for(int i=1; i<=N; i++)
printf("%d ", A[i]);
printf("\n");
}
int random(int left, int right){
return rand() % (right-left+1) + left;
}
int Partition(int left, int right){
//int p = (left+right)/2;
int p = random(left, right);
int x = A[p];
int iLeft = left;
int iRight = right;
do{
while(A[iLeft]<x)
iLeft++;
while(A[iRight]>x)
iRight--;
if(iLeft<=iRight){
swap(A[iLeft], A[iRight]);
iLeft++;
iRight--;
}
}while (iLeft<=iRight);
return iLeft;
}
void QuickSort(int left, int right){
if(right<=left)
return;
int q = Partition(left, right);
//afisare();
if(k<=q)
QuickSort(left, q);
else
QuickSort(q+1, right);
}
int main(){
freopen("sdo.in", "r", stdin);
freopen("sdo.out", "w", stdout);
srand(time(NULL));
citire();
if(N == 1)
cout << A[1];
else
QuickSort(1, N);
// afisare();
cout << A[k];
return 0;
}