This documentation is automatically generated by online-judge-tools/verification-helper
View the Project on GitHub ruthen71/rcpl
#include "data_structure/erasable_priority_queue.hpp"
要素が含まれていることが保証されている場合に削除可能
std::multiset よりも定数倍が良い
std::multiset
比較関数を自分で定義する場合は ErasablePriorityQueue<int, std::greater<int>> などとする
ErasablePriorityQueue<int, std::greater<int>>
#pragma once #include <queue> // 要素が含まれていることが保証されている場合に削除可能な優先度付きキュー // std::multiset よりも定数倍が良い // ErasablePriorityQueue<int, std::greater<int>> とすれば最小のものから順に取り出せる template <class T, class F = std::less<T>> struct ErasablePriorityQueue { private: std::priority_queue<T, std::vector<T>, F> que, erase_que; void reduce() { while (que.size() and erase_que.size() and que.top() == erase_que.top()) { que.pop(); erase_que.pop(); } } public: size_t size() const { assert(que.size() >= erase_que.size()); return que.size() - erase_que.size(); } void push(const T& t) { que.push(t); } void erase(const T& t) { erase_que.push(t); } const T& top() { reduce(); return que.top(); } void pop() { reduce(); que.pop(); } };
#line 2 "data_structure/erasable_priority_queue.hpp" #include <queue> // 要素が含まれていることが保証されている場合に削除可能な優先度付きキュー // std::multiset よりも定数倍が良い // ErasablePriorityQueue<int, std::greater<int>> とすれば最小のものから順に取り出せる template <class T, class F = std::less<T>> struct ErasablePriorityQueue { private: std::priority_queue<T, std::vector<T>, F> que, erase_que; void reduce() { while (que.size() and erase_que.size() and que.top() == erase_que.top()) { que.pop(); erase_que.pop(); } } public: size_t size() const { assert(que.size() >= erase_que.size()); return que.size() - erase_que.size(); } void push(const T& t) { que.push(t); } void erase(const T& t) { erase_que.push(t); } const T& top() { reduce(); return que.top(); } void pop() { reduce(); que.pop(); } };