Pagini recente » Cod sursa (job #1137270) | Cod sursa (job #1003481) | Cod sursa (job #2066417) | Cod sursa (job #3290515) | Cod sursa (job #2538574)
#include <bits/stdc++.h>
#define pb push_back
#define fi first
#define se second
typedef unsigned long long ul;
typedef long long ll;
using namespace std;
ll n, k, c;
ll bfprt(vector <ll> a)
{
if (a.size() <= 5)
return a[a.size() / 2];
vector <ll> sublista, mediana;
ll sz = a.size();
for (ll i = 0; i < sz; i += 5)
{
for (ll j = i; j < min(i + 5, sz); j++)
sublista.pb(a[j]);
sort(sublista.begin(), sublista.end());
mediana.pb(sublista[sublista.size() / 2]);
sublista.clear();
}
return bfprt(mediana);
}
ll quickselect(vector <ll> a, ll k)
{
ll p = bfprt(a);
vector <ll> L, E, H;
for (ll i = 0; i < a.size(); i++)
{
if (a[i] < p)
L.pb(a[i]);
else if (a[i] == p)
E.pb(a[i]);
else
H.pb(a[i]);
}
if ((k - 1) < L.size())
return quickselect(L, k);
else if ((k - 1) < L.size() + E.size())
return E[0];
else
return quickselect(H, k - L.size() - E.size());
}
int main(){
ios_base::sync_with_stdio(0); cin.tie(); cout.tie();
ifstream cin("sdo.in");
ofstream cout("sdo.out");
vector <ll> a;
cin >> n >> k;
for (ll i = 0; i < n; i++)
{
cin >> c;
a.pb(c);
}
cout << quickselect(a, k);
return 0;
}