1 条题解

  • 0
    @ 2026-8-23 21:12:43

    题解

    思路

    把单个水晶球写成列向量 x=(A,B,C,1)Tx=(A,B,C,1)^T。七种操作中的前六种都可写成 xMxx\gets Mx:前三种是属性间线性叠加,操作 4 利用常数坐标实现加法,操作 5 修改对角元,操作 6 把 CC 所在行清零并从常数坐标取值。

    线段树节点保存区间向量和 (A,B,C,len)T(\sum A,\sum B,\sum C,\text{len})^T。同一个矩阵可直接作用于向量和,因此支持区间修改和区间查询。

    做法

    每个节点维护一个待下传矩阵 LL。新操作矩阵为 MM 时,节点和更新为 MsumM\cdot sum,懒标记更新为 MLM\cdot L,因为子节点将先经历旧操作、再经历新操作。查询时把懒标记下传即可。

    子任务 1 可以逐元素模拟。所有区间均为 [1,n][1,n] 时只需维护一个全局四维向量。操作仅含 4,5,6,74,5,6,7 时三个属性可以分别维护独立懒标记。没有常数加法与赋值时,三维线性矩阵已足够。

    证明

    每种修改对 (A,B,C,1)(A,B,C,1) 都是线性变换。矩阵乘法的结合律保证按时间顺序复合后,节点懒标记与逐次执行操作等价。线性变换满足 M(x1++xt)=Mx1++MxtM(x_1+\cdots+x_t)=Mx_1+\cdots+Mx_t,所以直接变换区间和与逐元素修改后再求和完全一致。线段树把任意区间拆成互不相交节点,查询合并后得到题目要求的三个属性和。

    复杂度

    • 时间复杂度:O((n+m)logn)O((n+m)\log n),矩阵维数为常数;
    • 空间复杂度:O(n)O(n)
    • 1

    信息

    ID
    995
    时间
    5000ms
    内存
    512MiB
    难度
    10
    标签
    递交数
    1
    已通过
    0
    上传者