Pagini recente » Cod sursa (job #2725052) | Cod sursa (job #1653471) | Cod sursa (job #516411) | Cod sursa (job #649622) | Cod sursa (job #573021)
Cod sursa(job #573021)
#include <iostream>
#include <fstream>
#include <time.h>
#include <stdlib.h>
using namespace std;
const int nmax = 3000010;
int N, A[nmax], K;
void read()
{
ifstream in("sdo.in");
in>> N >> K;
for(int i = 1; i <= N; i++)
in>> A[i];
}
int part(int S, int D)
{
int p = A[rand() % (D - S + 1) + S];
int i = S - 1, j = D + 1;
while(true)
{
do{
++i;
}while(A[i] < p);
do{
j--;
}while(A[j] > p);
if(i < j)
swap(A[i], A[j]);
else return j;
}
return j;
}
void sel(int S, int D, int k)
{
if(S == D)
return;
int q = part(S, D);
int R = q - S + 1;
if(R >= k)
sel(S, q, k);
else sel(q + 1, D, k - R);
}
int main()
{
srand ( time (NULL) );
read();
sel(1, N, K);
ofstream out("sdo.out");
out << A[K];
return 0;
}