Pagini recente » Cod sursa (job #560157) | Cod sursa (job #2677969) | Cod sursa (job #2611448) | Cod sursa (job #1358602) | Cod sursa (job #1250392)
#include <fstream>
using namespace std;
ifstream fin("sdo.in");
ofstream fout("sdo.out");
int a[3000001];
int partition(int in, int sf)
{
if (in == sf)
return in;
int i = in - 1;
for (int j = in; j <= sf; j++)
{
if (a[j] <= a[sf])
{
i++;
int aux = a[i];
a[i] = a[j];
a[j] = aux;
}
}
return i;
}
int kth_element(int n, int m)
{
int in = 1;
int sf = n;
int k = rand() % (sf - in) + in;
int aux = a[k];
a[k] = a[n];
a[n] = aux;
k = partition(1, n);
if (k > m)
{
in = 1;
sf = k - 1;
}
else
{
in = k + 1;
sf = n;
}
while (sf > in && k != m)
{
k = rand() % (sf - in) + in;
int aux = a[k];
a[k] = a[sf];
a[sf] = aux;
k = partition(in, sf);
if (k == m)
return a[k];
else
if (k > m)
{
sf = k - 1;
}
else
{
in = k + 1;
}
}
if (k==m)
return a[k];
else return a[in];
}
int main()
{
srand(921241215);
int n,m;
fin >> n >>m;
for (int i = 1; i <= n; i++)
{
fin >> a[i];
}
fout << kth_element(n,m);
}