Pagini recente » Cod sursa (job #860671) | Cod sursa (job #1686292) | Cod sursa (job #2723803) | Cod sursa (job #1439021) | Cod sursa (job #1933527)
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <ctime>
#define maxN 3000003
using namespace std;
ifstream fin("sdo.in");
ofstream fout("sdo.out");
int n,k,v[maxN];
int getKthElement(int left, int right, int k)
{
if (left==right) return v[left];
int i=left, j=right, piv=v[left+rand()&(right-left+1)];
do {
while (v[i]<piv) ++i;
while (v[j]>piv) --j;
if (i<=j)
{
swap(v[i],v[j]);
++i;
--j;
}
}while (i<=j);
if (j-left+1>=k) return getKthElement(left,j,k);
else return getKthElement(j+1,right,k-j+left-1);
}
int main()
{
srand(time(NULL));
fin>>n>>k;
for (int i=1; i<=n; ++i)
fin>>v[i];
fout<<getKthElement(1,n,k);
return 0;
}