1#ifndef LIPH_ALGORITHM_H_
2#define LIPH_ALGORITHM_H_
14void erase(std::vector<T>& v,
const std::set<size_t>& idx) {
15 if (idx.empty())
return;
16 auto it = idx.begin();
18 for (
size_t i = 0; i < v.size(); ++i) {
19 if (it != idx.end() && i == *it) {
23 v[size] = std::move(v[i]);
32std::vector<T>
topk(
const std::vector<T>& data,
size_t k) {
33 if (k == 0)
return {};
34 if (data.size() <= k)
return data;
37 std::priority_queue<T, std::vector<T>, std::greater<T>> q(data.begin(), data.begin() + k);
38 for (
size_t i = k; i < data.size(); i++) {
39 if (data[i] > q.top()) {
44 for (
size_t i = 0; i < k; i++) {
45 ans.emplace_back(q.top());
52T
find_kth(
const std::vector<T>& data,
size_t k) {
53 assert(data.size() > 0 && k >= 1 && k <= data.size());
54 std::priority_queue<T> q(data.begin(), data.end());
55 for (
size_t i = 0; i < k - 1; i++) {
63 int i = 0, j = n, mid;
65 mid = i + (j - i) / 2;
66 if (a[mid] == val)
return mid;
Definition: algorithm.h:10
T find_kth(const std::vector< T > &data, size_t k)
Definition: algorithm.h:52
std::vector< T > topk(const std::vector< T > &data, size_t k)
Definition: algorithm.h:32
int binary_search(T a[], int n, T val)
Definition: algorithm.h:62
void erase(std::vector< T > &v, const std::set< size_t > &idx)
Erases the specified elements from v, according to index in idx.
Definition: algorithm.h:14