之前尝试了推 tag 的方法,感觉对我还是难度太大。
现在才发现用矩阵乘法直观很多。要被卡常可以手拆矩乘减小常数了。
- 区间加,区间历史和。
线段树上维护向量 \(\begin{bmatrix}sum&hsum&len\end{bmatrix}\)。
区间加即乘上矩阵
\[\begin{bmatrix}1&0&0\\0&1&0\\v&0&1 \end{bmatrix} \]更新历史和即乘上矩阵
\[\begin{bmatrix}1&1&0\\0&1&0\\0&0&1\end{bmatrix} \]发现有值的位置只有 \(7\) 个,可以拆开维护,本质和推 tag 一样。
- \(0,1\) 序列,区间异或,区间历史和。
线段树上维护向量 \(\begin{bmatrix}s0&s1&hsum\end{bmatrix}\)。
区间异或即乘上矩阵
\[\begin{bmatrix}0&1&0\\1&0&0\\0&0&1 \end{bmatrix} \]更新历史和即乘上矩阵
\[\begin{bmatrix}1&0&0\\0&1&1\\0&0&1\end{bmatrix} \] 标签:历史,end,矩阵,begin,bmatrix,区间 From: https://www.cnblogs.com/Terac/p/18038173