Pagini recente » Cod sursa (job #2029466) | Istoria paginii runda/concurs_cu_o_problema_usoara_si_una_medie/clasament | Cod sursa (job #742389) | Cod sursa (job #2027618) | Cod sursa (job #742392)
Cod sursa(job #742392)
#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;
}