「THUSCH 2017」大魔法师

柒葉灬

2019-04-06 18:33:22

Personal

# 「THUSCH 2017」大魔法师 —— 题解 ----- ### 传送门:[LOJ 2980](https://loj.ac/problem/2980) ---- #### 思路:**矩阵乘法**, 可以把每一个操作看成乘上一个矩阵,或者加上一个矩阵 如下: ---------- 对于$1$操作,可以这么处理: $$\begin{bmatrix} 1&1&0 \\ 0&1&0\\0&0&1\end{bmatrix}\times \begin{bmatrix} A\\B\\C\end{bmatrix}=\begin{bmatrix} A+B\\B\\C\end{bmatrix}$$ $2,3$操作同理。 --------- 对于$4$操作,可以这么处理: $$\begin{bmatrix} v\\0\\0\end{bmatrix}+\begin{bmatrix} A\\B\\C\end{bmatrix}=\begin{bmatrix} A+v\\B\\C\end{bmatrix}$$ -------- 对于$5$操作,可以这么处理: $$\begin{bmatrix} 1&0&0\\0&v&0\\0&0&1\end{bmatrix}\times\begin{bmatrix} A\\B\\C\end{bmatrix}=\begin{bmatrix} A\\B*v\\C\end{bmatrix}$$ -------- 对于$6$操作,可以这么处理: $$\begin{bmatrix} 1&0&0\\0&1&0\\0&0&0\end{bmatrix}\times\begin{bmatrix} A\\B\\C\end{bmatrix}=\begin{bmatrix} A\\B\\0\end{bmatrix}$$ $$\begin{bmatrix} 0\\0\\v\end{bmatrix}+\begin{bmatrix} A\\B\\0\end{bmatrix}=\begin{bmatrix} A\\B\\v\end{bmatrix}$$ 即: $$\begin{bmatrix} 0\\0\\v\end{bmatrix}+\begin{bmatrix} 1&0&0\\0&1&0\\0&0&0\end{bmatrix}\times\begin{bmatrix} A\\B\\C\end{bmatrix}=\begin{bmatrix} A\\B\\v\end{bmatrix}$$ -------------- 到这里,所有的操作对应的转移矩阵都已经有了, 还有最后一个问题就是: 运算顺序该怎么办? 线段树$down$操作的时候,是先加还是先乘? 貌似都错的。 --------- 转换一下思路: 给你一个数列, 支持$3$种操作: 1.区间加值 2.区间乘值 3.区间求和 思路:维护一个$lazy\_time(k)$和$lazy\_add(b)$ 乘值得时候把$lazy\_add$也乘上该值即可, $down$的时候先乘后加 --------- 那么矩阵的运算有什么性质来着? 能不能转换成一个形如“矩阵$B+$矩阵$K\times$初始矩阵$X$”的形式呢? #### 加值的情况 在加值的时候,可以直接加到矩阵$B$上, ### 乘值得情况 在乘值得时候,$B$和$K$同时乘上即可, (因为矩阵乘法满足分配率) 但是要注意乘$K$的时候,是$K$在后面。 (矩阵乘法不满足交换律) 知道这些之后就能写了。 ---------