C++ アルゴリズムとデータ構造のライブラリ
#include "library/search/binary_search/bi_le_val.hpp"sort(A.begin(), A.end());
int v = bi_le_val(A, x);
int v = bi_le_val(st, x);
if (v == -INF) {
// 値が存在しなかった
}
#pragma once
template <typename T> T bi_le_val(vector<T> &v, const T &x) {
auto it = upper_bound(v.begin(), v.end(), x);
return (it == v.begin() ? -INF : *--it);
}
template <typename T> T bi_le_val(const set<T> &st, const T &x) {
auto it = st.upper_bound(x);
return (it == st.begin() ? -INF : *--it);
}#line 2 "library/search/binary_search/bi_le_val.hpp"
template <typename T> T bi_le_val(vector<T> &v, const T &x) {
auto it = upper_bound(v.begin(), v.end(), x);
return (it == v.begin() ? -INF : *--it);
}
template <typename T> T bi_le_val(const set<T> &st, const T &x) {
auto it = st.upper_bound(x);
return (it == st.begin() ? -INF : *--it);
}