Pagini recente » Cod sursa (job #2067270) | Cod sursa (job #1022167) | Cod sursa (job #2148275) | Cod sursa (job #1492185) | Cod sursa (job #2538604)
#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 randomIndex = rand() % a.size();
ll p = a[randomIndex];
vector <ll> A;
for (ll i = 0; i < a.size(); i++)
if (a[i] < p)
A.pb(a[i]);
if ((k - 1) < A.size())
return quickselect(A, k);
ll n = A.size();
A.clear();
for (ll i = 0; i < a.size(); i++)
if (a[i] == p)
A.pb(a[i]);
if ((k - 1) < n + A.size())
return A[0];
n += A.size();
A.clear();
for (ll i = 0; i < a.size(); i++)
if (a[i] > p)
A.pb(a[i]);
return quickselect(A, k - n);
}
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;
}