历史和

之前尝试了推 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} \]

posted @ 2024-02-27 20:32  Terac  阅读(37)  评论(0)    收藏  举报