Kyopro Library
 
読み取り中…
検索中…
一致する文字列を見つけられません
sorted_tree.hpp
[詳解]
1#include"../../kyopro_library/template.hpp"
2
3#include <ext/pb_ds/assoc_container.hpp>
4#include <ext/pb_ds/tree_policy.hpp>
5using namespace __gnu_pbds;
6template<typename T>
10 SortedTree()=default;
11
12 /// @brief コンストラクタ
13 /// @param not_found 指定の値が見つからなかったときに返す値
14 SortedTree(T not_found=-1) { this->not_found=not_found; }
15
16 /// @brief 最小値を返す
17 T min() {
18 if(this->empty()) return not_found;
19 return*this->begin();
20 }
21
22 /// @brief 最大値を返す
23 T max() {
24 if(this->empty()) return not_found;
25 return*this->rbegin();
26 }
27
28 /// @brief 最小値を返し、削除する
29 T pop_min() {
30 if(this->empty()) return not_found;
31 T ret=min(); this->erase(ret);
32 return ret;
33 }
34
35 /// @brief 最大値を返し、削除する
36 T pop_max() {
37 if(this->empty()) return not_found;
38 T ret=max(); this->erase(ret);
39 return ret;
40 }
41
42 /// @brief x が含まれているか否かを返す
43 bool contains(T x) { return this->find(x)!=this->end(); }
44
45 /// @brief x を削除する
46 bool discard(T x) {
47 auto itr=this->find(x);
48 if(itr==this->end()) return false;
49 this->erase(itr);
50 return true;
51 }
52
53 /// @brief x より大きい最小の値を返す
54 T gt(T x) {
55 auto itr=this->upper_bound(x);
56 if(itr==this->end()) return not_found;
57 return *itr;
58 }
59
60 /// @brief x 以上最小の値を返す
61 T ge(T x) {
62 auto itr=this->lower_bound(x);
63 if(itr==this->end()) return not_found;
64 return *itr;
65 }
66
67 /// @brief x 未満最大の値を返す
68 T lt(T x) {
69 auto itr=this->lower_bound(x);
70 if(itr==this->begin()) return not_found;
71 return *--itr;
72 }
73
74 /// @brief x 以下の最大の値を返す
75 T le(T x) {
76 auto itr=this->upper_bound(x);
77 if(itr==this->begin()) return not_found;
78 return *--itr;
79 }
80
81 /// @brief x より小さい値の個数を返す
82 int count_lt(T x) { return this->order_of_key(x); }
83
84 /// @brief x 以下の値の個数を返す
85 int count_le(T x) { return this->order_of_key(x+1); }
86
87 /// @brief x より大きい値の個数を返す
88 int count_gt(T x) { return this->size()-this->order_of_key(x+1); }
89
90 /// @brief x 以上の値の個数を返す
91 int count_ge(T x) { return this->size()-this->order_of_key(x); }
92
93 /// @brief k(0-indexed) 番目に小さい値の個数を返す
94 T kth_min(int k) { return *this->find_by_order(k); }
95
96 /// @brief k(0-indexed) 番目に大きい値の個数を返す
97 T kth_max(int k) { return *this->find_by_order(this->size()-k-1); }
98};
T pop_max()
最大値を返し、削除する
bool contains(T x)
x が含まれているか否かを返す
int count_le(T x)
x 以下の値の個数を返す
T ge(T x)
x 以上最小の値を返す
T le(T x)
x 以下の最大の値を返す
bool discard(T x)
x を削除する
SortedTree(T not_found=-1)
コンストラクタ
T max()
最大値を返す
T kth_max(int k)
k(0-indexed) 番目に大きい値の個数を返す
T pop_min()
最小値を返し、削除する
int count_gt(T x)
x より大きい値の個数を返す
T kth_min(int k)
k(0-indexed) 番目に小さい値の個数を返す
T min()
最小値を返す
int count_ge(T x)
x 以上の値の個数を返す
int count_lt(T x)
x より小さい値の個数を返す
SortedTree()=default
T gt(T x)
x より大きい最小の値を返す
T lt(T x)
x 未満最大の値を返す