Pagini recente » Cod sursa (job #2162980) | Cod sursa (job #669253) | Cod sursa (job #2302726) | Cod sursa (job #988636) | Cod sursa (job #2306582)
#include<fstream>
#include<ctime>
using namespace std;
#define MAX_N 3000005
ifstream f("sdo.in");
ofstream g("sdo.out");
int A[MAX_N],N,K;
void citire()
{
f>>N>>K;
for(int i=1;i<=N;++i)
f>>A[i];
}
int part(int A[MAX_N], int li, int lf)
{
int i = li-1, j = lf+1, p = A[li + (rand()%(lf-li+1))];
while(1)
{
do
{
++i;
} while(A[i] < p);
do
{
--j;
} while(p < A[j]);
if(i < j)
swap(A[i], A[j]);
else
return j;
}
return 0;
}
void sel(int A[MAX_N], int li, int lf, int k)
{
if(li == lf)
return;
int q = part(A, li, lf);
int t = q-li+1;
if(t >= k)
sel(A, li, q, k);
else
sel(A, q+1, lf, k-t);
}
int main()
{
srand(time(NULL));
citire();
sel(A,1,N,K),g<<A[K];
}