Pagini recente » Cod sursa (job #1161987) | Cod sursa (job #1993081) | Cod sursa (job #141610) | Cod sursa (job #84086) | Cod sursa (job #2611476)
#include <fstream>
using namespace std;
ifstream fin ("sdo.in");
ofstream fout("sdo.out");
int n, v[3000005];
int part(int st, int dr)
{
swap(v[rand() % (dr-st+1) + st], v[dr]);
int pivot = v[dr];
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;
}