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/012Inversion.hpp

Code

// ABC265G
// submission : https://atcoder.jp/contests/abc265/submissions/42179632

struct U {
    using T1 = array<array<ll, 3>, 3>;
    using T2 = array<ll, 3>;

    static T1 id1() {
        T1 res;
        rep(i, 3) rep(j, 3) res[i][j] = 0;
        return res;
    }
    static T2 id2() {
        T2 res;
        rep(i, 3) res[i] = i;
        return res;
    }
    static T1 op11(const T1& a, const T1& b) {
        T1 res = id1();
        rep(i, 3) {
            rep(j, 3) {
                res[i][j] += a[i][j] + b[i][j];
                if (i != j) {
                    res[i][j] += a[i][i] * b[j][j];
                }
            }
        }

        return res;
    }

    static T1 op21(const T2& b, const T1& a) {
        T1 res = id1();
        rep(i, 3) {
            rep(j, 3) {
                if (i == j || b[i] != b[j]) {
                    res[b[i]][b[j]] += a[i][j];
                }
            }
        }
        return res;
    }

    // order : b -> a
    static T2 op22(const T2& a, const T2& b) {
        T2 res;
        rep(i, 3) res[i] = a[b[i]];
        return res;
    }
};
#line 1 "cpp_src/data_structure/LazySegmentTreeHelper/012Inversion.hpp"
// ABC265G
// submission : https://atcoder.jp/contests/abc265/submissions/42179632

struct U {
    using T1 = array<array<ll, 3>, 3>;
    using T2 = array<ll, 3>;

    static T1 id1() {
        T1 res;
        rep(i, 3) rep(j, 3) res[i][j] = 0;
        return res;
    }
    static T2 id2() {
        T2 res;
        rep(i, 3) res[i] = i;
        return res;
    }
    static T1 op11(const T1& a, const T1& b) {
        T1 res = id1();
        rep(i, 3) {
            rep(j, 3) {
                res[i][j] += a[i][j] + b[i][j];
                if (i != j) {
                    res[i][j] += a[i][i] * b[j][j];
                }
            }
        }

        return res;
    }

    static T1 op21(const T2& b, const T1& a) {
        T1 res = id1();
        rep(i, 3) {
            rep(j, 3) {
                if (i == j || b[i] != b[j]) {
                    res[b[i]][b[j]] += a[i][j];
                }
            }
        }
        return res;
    }

    // order : b -> a
    static T2 op22(const T2& a, const T2& b) {
        T2 res;
        rep(i, 3) res[i] = a[b[i]];
        return res;
    }
};
Back to top page