library

This documentation is automatically generated by online-judge-tools/verification-helper

View the Project on GitHub kk2a/library

:heavy_check_mark: math/monoid/max_min_sumwithsize.hpp

Depends on

Required by

Verified with

Code

#ifndef KK2_MATH_MONOID_MAX_MIN_SUMWITHSUM_HPP
#define KK2_MATH_MONOID_MAX_MIN_SUMWITHSUM_HPP 1

#include <functional>

#include "../../type_traits/io.hpp"

namespace kk2 {

namespace monoid {

template <class S, class T, class Compare = std::less<S>> struct MaxMinSumWithSize {
    static constexpr bool commutative = true;
    using M = MaxMinSumWithSize;
    S max, min, sum;
    T size;
    bool is_unit;

    MaxMinSumWithSize() : is_unit(true) {}
    MaxMinSumWithSize(S a) : max(a), min(a), sum(a), size(1), is_unit(false) {}
    MaxMinSumWithSize(S max_, S min_, S sum_, T size_)
        : max(max_),
          min(min_),
          sum(sum_),
          size(size_),
          is_unit(false) {}

    inline static M op(M l, M r) {
        if (l.is_unit or r.is_unit) return l.is_unit ? r : l;
        return M(Compare{}(l.max, r.max) ? r.max : l.max,
                 Compare{}(l.min, r.min) ? l.min : r.min,
                 l.sum + r.sum,
                 l.size + r.size);
    }

    inline static M unit() { return M(); }

    bool operator==(const M &rhs) const {
        return is_unit == rhs.is_unit
               and (is_unit
                    or (max == rhs.max and min == rhs.min and sum == rhs.sum and size == rhs.size));
    }

    bool operator!=(const M &rhs) const {
        return is_unit != rhs.is_unit
               or (!is_unit
                   and (max != rhs.max or min != rhs.min or sum != rhs.sum or size != rhs.size));
    }

    template <class OStream, is_ostream_t<OStream> * = nullptr>
    friend OStream &operator<<(OStream &os, const M &x) {
        if (x.is_unit) os << "(unit)";
        else
            os << "(max:" << x.max << ", min:" << x.min << ", sum:" << x.sum << ", size:" << x.size
               << ")";
        return os;
    }

    template <class IStream, is_istream_t<IStream> * = nullptr>
    friend IStream &operator>>(IStream &is, M &x) {
        S a;
        is >> a;
        x = M(a);
        return is;
    }
};

} // namespace monoid

} // namespace kk2

#endif // KK2_MATH_MONOID_MAX_MIN_SUMWITHSUM_HPP
Traceback (most recent call last):
  File "/opt/hostedtoolcache/Python/3.12.0/x64/lib/python3.12/site-packages/onlinejudge_verify/documentation/build.py", line 71, in _render_source_code_stat
    bundled_code = language.bundle(stat.path, basedir=basedir, options={'include_paths': [basedir]}).decode()
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/hostedtoolcache/Python/3.12.0/x64/lib/python3.12/site-packages/onlinejudge_verify/languages/cplusplus.py", line 187, in bundle
    bundler.update(path)
  File "/opt/hostedtoolcache/Python/3.12.0/x64/lib/python3.12/site-packages/onlinejudge_verify/languages/cplusplus_bundle.py", line 401, in update
    self.update(self._resolve(pathlib.Path(included), included_from=path))
  File "/opt/hostedtoolcache/Python/3.12.0/x64/lib/python3.12/site-packages/onlinejudge_verify/languages/cplusplus_bundle.py", line 312, in update
    raise BundleErrorAt(path, i + 1, "#pragma once found in a non-first line")
onlinejudge_verify.languages.cplusplus_bundle.BundleErrorAt: type_traits/io.hpp: line 4: #pragma once found in a non-first line
Back to top page