线段树维护矩阵信息

constexpr int inf = 1e9;
const int N = 3;
using Matrix = array<array<i64, N>, N>;
Matrix operator * (const Matrix &a, const Matrix &b) {
Matrix c; // 未初始化
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
i64 res = 0;
for (int k = 0; k < N; k++) {
res += a[i][k] * b[k][j];
}
c[i][j] = res;
}
}
return c;
}
const int M = 2e5 + 5;
Matrix t[M << 2];
void modify(int p, int l, int r, int x, const Matrix &v) {
if (l == r) {
t[p] = v;
return;
}
int mid = l + r >> 1;
if (x <= mid) {
modify(p << 1, l, mid, x, v);
} else {
modify(p << 1 | 1, mid + 1, r, x, v);
}
t[p] = t[p << 1] * t[p << 1 | 1];
}

image-20240919204807168

image-20240919204836933