This documentation is automatically generated by online-judge-tools/verification-helper
View the Project on GitHub noshi91/Library
#include "other/int_alias.cpp" #include "other/random_integer.cpp" #include <cassert> #include <cstddef> #include <random> #include <utility> #include <vector> template <class T> class randomized_queue { public: using value_type = T; private: std::vector<T> c; void select() { std::swap(c.back(), c[random_integer<usize>(0, c.size() - 1)]); } public: randomized_queue() = default; bool empty() const { return c.empty(); } usize size() const { return c.size(); } T &front() { assert(!empty()); select(); return c.back(); } void push(T x) { c.push_back(std::move(x)); } T pop() { assert(!empty()); select(); T ret = std::move(c.back()); c.pop_back(); return ret; } }; /** * @brief Randomized Queue */
#line 2 "other/int_alias.cpp" #include <cstddef> #include <cstdint> using i32 = std::int32_t; using i64 = std::int64_t; using u32 = std::uint32_t; using u64 = std::uint64_t; using isize = std::ptrdiff_t; using usize = std::size_t; #line 2 "other/random_integer.cpp" #include <random> #include <type_traits> template <class T, class... Args> using any_of_is_same = std::disjunction<std::is_same<T, Args>...>; template <class IntType = int> IntType random_integer(const IntType a, const IntType b) { static_assert( any_of_is_same<IntType, short, int, long, long long, unsigned short, unsigned int, unsigned long, unsigned long long>::value); static std::default_random_engine g(91); return std::uniform_int_distribution<IntType>(a, b)(g); } #line 3 "data_structure/randomized_queue.cpp" #include <cassert> #line 7 "data_structure/randomized_queue.cpp" #include <utility> #include <vector> template <class T> class randomized_queue { public: using value_type = T; private: std::vector<T> c; void select() { std::swap(c.back(), c[random_integer<usize>(0, c.size() - 1)]); } public: randomized_queue() = default; bool empty() const { return c.empty(); } usize size() const { return c.size(); } T &front() { assert(!empty()); select(); return c.back(); } void push(T x) { c.push_back(std::move(x)); } T pop() { assert(!empty()); select(); T ret = std::move(c.back()); c.pop_back(); return ret; } }; /** * @brief Randomized Queue */