Pagini recente » Cod sursa (job #2227923) | Cod sursa (job #1477081) | Clasamentul arhivei de probleme | Cod sursa (job #1368028) | Cod sursa (job #1935107)
#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)
{
while (left<right)
{
int st=left, dr=right, mid=v[left+rand()%(right-left+1)];
while (st<dr)
{
if (v[st]>=mid) { swap(v[st],v[dr]); --dr; }
else ++st;
}
if (v[dr]>mid) dr--;
if (k<=dr) right=dr;
else left=dr+1;
}
return v[k];
}
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;
}