Kyopro Library
 
読み取り中…
検索中…
一致する文字列を見つけられません
erasable_pq.hpp
[詳解]
1#include"../../kyopro_library/template.hpp"
2
3/// @brief 削除可能な優先度付きキュー
4/// @tparam MAX trueのとき、最大値を返す
5/// @tparam NONE 空のときに返す値
6template<typename T, bool MAX=true, T NONE=-INF>
7struct ErasablePQ {
9 int siz=0;
10
11 ErasablePQ() { siz=0; }
12
13 /// @brief x を追加する
14 void push(int x) {
15 if(!MAX) x=-x;
16 pq.push(x);
17 siz++;
18 }
19
20 /// @brief x を削除する
21 void erase(int x) {
22 if(!MAX) x=-x;
23 pq2.push(x);
24 siz--;
25 }
26
27 /// @brief 最大値を返す
28 T top() {
29 while(!pq.empty()) {
30 if(pq2.empty()) return (MAX ? pq.top() : -pq.top());
31 if(pq.top()==pq2.top()) {
32 pq.pop();
33 pq2.pop();
34 } else {
35 return (MAX ? pq.top() : -pq.top());
36 }
37 }
38
39 return NONE;
40 }
41};
削除可能な優先度付きキュー
priority_queue< T > pq2
priority_queue< T > pq
T top()
最大値を返す
void push(int x)
x を追加する
void erase(int x)
x を削除する