Pagini recente » Cod sursa (job #2031618) | Cod sursa (job #2355178) | Cod sursa (job #3126052) | Cod sursa (job #2890280) | Cod sursa (job #2384244)
#include <fstream>
#include <cstdlib>
#include <ctime>
#define input "sdo.in"
#define output "sdo.out"
#define NMAX 3000005
using namespace std;
ifstream in(input);
ofstream out(output);
int arr[NMAX], N, K;
void Swap(int &a, int &b)
{
int c = a;
a = b;
b = c;
}
void Read_Data()
{
in >> N >> K;
for (int i = 1; i <= N; i++)
in >> arr[i];
}
int Partition(int st, int dr)
{
int pivot = arr[st];
st--, dr++;
while (true)
{
do
{
st++;
} while (arr[st] < pivot);
do
{
dr--;
} while (arr[dr] > pivot);
if (st >= dr) return dr;
Swap(arr[st], arr[dr]);
}
}
int Rand_Partition(int st, int dr)
{
int r_pivot = st + rand() % (dr - st);
Swap(arr[r_pivot], arr[st]);
return Partition(st, dr);
}
void Quick_Sort(int st, int dr, int k)
{
if (st >= dr) return;
{
int mid = Rand_Partition(st, dr);
int toata_smecheria = mid - st + 1;
if(toata_smecheria >= k)
Quick_Sort(st, mid, k);
else
Quick_Sort(mid + 1, dr, k - toata_smecheria);
}
}
void Print_Sol()
{
out << arr[K] << "\n";
}
int main()
{
srand(time(NULL));
Read_Data();
Quick_Sort(1, N, K);
Print_Sol();
return 0;
}