Pagini recente » Cod sursa (job #1408137) | Cod sursa (job #2691741) | Cod sursa (job #162119) | Cod sursa (job #1732432) | Cod sursa (job #2607574)
#include <fstream>
#include <cstdlib>
using namespace std;
ifstream f("sdo.in");
ofstream g("sdo.out");
int n, k, i, w1[3000005], w2[3000005], w3[3000005];
int quickselect(int v[3000005], int lg)
{
int m1, m2, m3, i, p, x;
p = rand() % lg;
x = v[p];
m1 = m2 = m3 = 0;
for(i = 0; i < lg; i++)
if(v[i] < x)
w1[m1++] = v[i];
else
if(v[i] == x)
w2[m2++] = v[i];
else
w3[m3++] = v[i];
if(k <= m1)
return quickselect(w1, m1);
else
if(k <= m1 + m2)
return w2[0];
else
{
k -= (m1 + m2);
return quickselect(w3, m3);
}
}
int main()
{
f >> n >> k;
for(i = 0; i < n; i++)
f >> w1[i];
f.close();
g << quickselect(w1, n) << '\n';
g.close();
return 0;
}