Pagini recente » Cod sursa (job #661854) | Cod sursa (job #2279495) | Cod sursa (job #3201218) | Cod sursa (job #3376) | Cod sursa (job #3125763)
#include <bits/stdc++.h>
using namespace std;
ifstream f ("sdo.in");
ofstream g ("sdo.out");
const int nmax = 3e6 + 3;
int t1, t2, v[nmax], n, sol, k;
int solve(int st, int dr)
{
int pivot = v[st];
int cnt = 0;
for (int i = st + 1; i <= dr; ++i)
cnt += (v[i] <= pivot);
int idx = st + cnt;
swap(v[st], v[idx]);
int t1 = st;
int t2 = dr;
while (t1 < idx && t2 > idx)
{
while (v[t1] <= pivot)
++t1;
while (v[t2] > pivot)
--t2;
if (t1 < idx && t2 > idx)
{
swap(v[t1++], v[t2--]);
}
}
return idx;
}
void qsort(int st, int dr)
{
if (st >= dr)
{
sol = v[k];
return;
}
int poz = solve(st, dr);
if (k < poz)
qsort(st, poz - 1);
else
qsort(poz + 1, dr);
}
int main()
{
f >> n >> k;
for (int i = 1; i <= n; ++i)
f >> v[i];
qsort(1, n);
g << sol;
//for (int i = 1; i <= n; ++i)
// cout << v[i] << ' ' ;
return 0;
}