Pagini recente » Cod sursa (job #1332874) | Cod sursa (job #1089940) | Cod sursa (job #406772) | Istoria paginii utilizator/costinbanu | Cod sursa (job #744933)
Cod sursa(job #744933)
#include <fstream>
#include <algorithm>
using namespace std;
const int N = 3000005, inf = 0x3f3f3f3f;
int v[N], n, k;
ifstream in("sdo.in");
ofstream out("sdo.out");
int sdo(int v[], int n, int k)
{
int p, st = 1, dr = 0;
while (1)
{
p = v[ 1 + rand() % n ];
st = 1; dr = 0;
for (int i = 1 ; i <= n ; i++)
{
if (v[i] < p)
st++;
if (v[i] <= p)
dr++;
}
if (st <= k && k <= dr)
return p;
if (k < st)
{
v[0] = n;
n = 0;
for (int i = 1 ; i <= v[0] ; i++)
if (v[i] < p)
v[++n] = v[i];
continue;
}
k -= dr;
v[0] = n;
n = 0;
for (int i = 1 ; i <= v[0] ; i++)
if (v[i] > p)
v[++n] = v[i];
}
return 0;
}
int main()
{
in >> n >> k;
for (int i = 1 ; i <= n ; i++)
in >> v[i];
out << sdo(v, n, k) << "\n";
return 0;
}