* @author Satti Vamsi Krishna Reddy
* @brief With love for competitive programming!
// https://en.wikipedia.org/wiki/Double-ended_priority_queue
template<template<typename> typename DEPQ, typename T>
concept DEPQConcept = requires(DEPQ<T> depq, T&& t) {
{ depq.isEmpty() } -> std::same_as<bool>;
{ depq.size() } -> std::same_as<int>;
{ depq.getMin() } -> std::same_as<T const&>;
{ depq.getMax() } -> std::same_as<T const&>;
bool isEmpty() const { return s.empty(); }
int size() const { return s.size(); }
T const& getMin() const { return *s.begin(); }
T const& getMax() const { return *std::prev(s.end()); }
void put(T const& t) { s.insert(t); }
void removeMin() { s.erase(s.begin()); }
void removeMax() { s.erase(std::prev(s.end())); }
static_assert(DEPQConcept<DEPQ, T>);
template<typename T, typename Compare = std::less<T>>
bool isEmpty() const { return nodes.empty(); }
T const& getMin() const { return nodes.front().left; }
T const& getMax() const { return nodes.front().right; }
int size = 2 * nodes.size();
static_assert(DEPQConcept<DEPQ, T>);
enum class QueryType : int {
auto depq = MultiSetSTL::DEPQ<int>();
for (auto const _: std::views::iota(0, n)) {
for (auto const _: std::views::iota(0, q)) {
std::cin >> queryTypeInt;
auto queryType = static_cast<QueryType>(queryTypeInt);
if (queryType == QueryType::add) {
else if (queryType == QueryType::removeAndGetMin) {
std::cout << x << std::endl;
else if (queryType == QueryType::removeAndGetMax) {
std::cout << x << std::endl;