algorithm

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

View the Project on GitHub satashun/algorithm

:warning: cpp_src/data_structure/LazySegmentTreeHelper/RangeSetMinMaxSum.hpp

Code

// set val, range min, range max, range sum

struct Data {
    ll sum;
    int len, mn, mx;
    Data() {
        sum = len = 0;
        mn = INF;
        mx = -INF;
    }
    Data(ll sum, int len, int mn, int mx)
        : sum(sum), len(len), mn(mn), mx(mx) {};
};

struct U {
    using T1 = Data;
    using T2 = int;
    static T1 id1() { return Data(); }
    static T2 id2() { return INF; }
    static T1 op11(const T1& a, const T1& b) {
        T1 res;
        res.len = a.len + b.len;
        res.sum = a.sum + b.sum;
        res.mn = min(a.mn, b.mn);
        res.mx = max(a.mx, b.mx);
        return res;
    }
    static T1 op21(const T2& b, const T1& a) {
        if (b == INF)
            return a;
        else {
            T1 res;
            res.len = a.len;
            res.sum = ll(b) * a.len;
            res.mn = res.mx = b;

            return res;
        }
    }
    // a : new!
    static T2 op22(const T2& a, const T2& b) {
        if (a == INF)
            return b;
        else
            return a;
    }
};
#line 1 "cpp_src/data_structure/LazySegmentTreeHelper/RangeSetMinMaxSum.hpp"
// set val, range min, range max, range sum

struct Data {
    ll sum;
    int len, mn, mx;
    Data() {
        sum = len = 0;
        mn = INF;
        mx = -INF;
    }
    Data(ll sum, int len, int mn, int mx)
        : sum(sum), len(len), mn(mn), mx(mx) {};
};

struct U {
    using T1 = Data;
    using T2 = int;
    static T1 id1() { return Data(); }
    static T2 id2() { return INF; }
    static T1 op11(const T1& a, const T1& b) {
        T1 res;
        res.len = a.len + b.len;
        res.sum = a.sum + b.sum;
        res.mn = min(a.mn, b.mn);
        res.mx = max(a.mx, b.mx);
        return res;
    }
    static T1 op21(const T2& b, const T1& a) {
        if (b == INF)
            return a;
        else {
            T1 res;
            res.len = a.len;
            res.sum = ll(b) * a.len;
            res.mn = res.mx = b;

            return res;
        }
    }
    // a : new!
    static T2 op22(const T2& a, const T2& b) {
        if (a == INF)
            return b;
        else
            return a;
    }
};
Back to top page