Pagini recente » Cod sursa (job #652538) | Cod sursa (job #1234466) | Cod sursa (job #1793369) | Cod sursa (job #2078852) | Cod sursa (job #742391)
Cod sursa(job #742391)
#include <fstream>
#include <cstdlib>
using namespace std;
const int N = 3000005, inf = 0x3f3f3f3f;
int sir[N], n, k;
ifstream in("sdo.in");
ofstream out("sdo.out");
int sdo(int v[], int n, int k)
{
int x, nr;
while (k != 1)
{
x = v[rand() % n + 1];
nr = 0;
for (int i = 1 ; i <= n ; i++)
if (v[i] <= x)
nr++;
if (k == nr)
return x;
if (k <= nr)
{
v[0] = 0;
for (int i = 1 ; i <= n ; i++)
if (v[i] <= x)
v[++v[0]] = v[i];
n = v[0];
continue;
}
v[0] = 0;
for (int i = 1 ; i <= n ; i++)
if (v[i] > x)
v[++v[0]] = v[i];
k -= nr;
n = v[0];
}
nr = inf;
for (int i = 1 ; i <= n ; i++)
if (v[i] < nr)
nr = v[i];
return nr;
}
int main()
{
in >> n >> k;
for (int i = 1 ; i <= n ; i++)
in >> sir[i];
out << sdo(sir, n, k) << "\n";
return 0;
}