Pagini recente » Cod sursa (job #3154554) | Cod sursa (job #1719900) | Cod sursa (job #3170569) | Cod sursa (job #2969084) | Cod sursa (job #2611468)
#include <fstream>
using namespace std;
ifstream fin ("sdo.in");
ofstream fout("sdo.out");
int n, v[3000005];
int part(int st, int dr)
{
int pivot = v[rand()% (dr-st+1) + st];
for(int i = st; i < dr; ++i)
if(v[i] <= pivot)
{
swap(v[st], v[i]);
st++;
}
swap(v[st], v[dr]);
return st;
}
int quickselect(int st, int dr, int k)
{
int pos = part(st, dr);
if(pos - st + 1 == k) return v[pos];
if(pos - st + 1 > k) return quickselect(st, pos-1, k);
return quickselect(pos+1, dr, k-pos+st-1);
}
int main()
{
int k;
fin >> n >> k;
for(int i = 1; i <= n; ++i) fin >> v[i];
fout << quickselect(1, n, k);
fin.close(); fout.close();
return 0;
}