首页 > 其他分享 >使用矩阵乘法维护的线段树

使用矩阵乘法维护的线段树

时间:2025-01-20 09:33:29浏览次数:1  
标签:begin end 线段 矩阵 bmatrix 区间 sum 乘法

车人去 WC 了,找了一个巴蜀毕业的哈工大大三学生来给他代课。

那就简单记录一下每天都讲了什么吧

CF GYM103470 Paimon Segment Tree

给定一个长度为 \(n\) 的序列 \(a\),以及 \(m\) 次区间加操作和 \(q\) 次询问(在处理完所有操作后再询问)。
询问操作:假设 \(a_{i,j}\) 表示进行完第 \(j\) 次操作后 \(a_i\) 的值。给定 \(l_k,r_k,x_k,y_k\) 查询

\[\sum^{r_k}_{i=lk}\sum^{y_k}_{j=x_k} a^2_{i,j} \]

显然可以想到的一步是,将询问离线下来差分第二个 \(\sum\),就可以转化成求解历史区间平方和。

接着考虑如何维护,首先处理平方:

\[\sum (a+k)^2=\sum (a^2+2ak+k^2) \]

则只需维护区间的 0 次,1 次,2 次和与历史区间平方和。

构造一个矩阵 \(data\):

\[\begin{bmatrix} len & sum & qsum & hsum \end{bmatrix} \]

对于区间加操作,相当于对区间的 \(data\) 乘上:

\[\begin{bmatrix} 1 & k & k^2 & 0\\ 0 & 1 & 2k & 0\\ 0 & 0 & 1 & 0\\ 0 & 0 & 0 & 1 \end{bmatrix} \]

同时一次修改后,我们还要对整体用以下矩阵操作一次来累加 \(hsum\)

\[\begin{bmatrix} 1 & 0 & 0 & 0\\ 0 & 1 & 0 & 0\\ 0 & 0 & 1 & 1\\ 0 & 0 & 0 & 1 \end{bmatrix} \]

时间复杂度 \(O((m+q)\log n\times4^3)\),需要卡常。

一个很智慧的应用是,我们可以自己模拟矩乘的过程来减少常数,当然你会发现这就变成了普通的维护 \(tag\) 的线段树。

标签:begin,end,线段,矩阵,bmatrix,区间,sum,乘法
From: https://www.cnblogs.com/lfyszy/p/18680755

相关文章

  • 矩阵乘法与加法模板 Matrix
    更新日志20250119:开工。运算对于矩阵乘法运算\[A\timesB=C\]你可以认为,\(C\)中第\(i\)行第\(j\)列的元素,就是\(A\)的第\(i\)行依次与\(B\)的第\(j\)列相乘的乘积之和。形式化的:\[C_{i,j}=\sum_{k=1}^nA_{i,k}B_{k,j}\]写成代码就是:rep(i,1,n)rep(j,1......
  • 矩阵特征值和特征向量的含义到底表示什么
    说人话:什么是特征值、特征向量。给我10分钟,还你一片蓝天我们在找矩阵A的特征值和特征向量的过程,其实就是在探寻什么向量能在矩阵A的变换下只做拉伸和压缩的变换,而不涉及旋转等其他类型的变换而这就是我们在埋头苦算的做的事情。实际上在现实应用中,我们需要对某个向......
  • 「酉矩阵是什么?几种常见的酉矩阵类型」
    0.酉矩阵的定义酉矩阵(UnitaryMatrix)是复数域中的一个重要矩阵类型。如果一个矩阵的逆等于它的共轭转置(Hermitiantranspose),那么这个矩阵被称为酉矩阵。用数学表示如下:U......
  • 线段树
    海亮OJ题单维护差分信息P4243[JSOI2009]等差数列若要在序列上处理等差数列,可以考虑差分法。此时,我们不必将差分数组和数列中的元素一一对应(这会影响理解),而是将差分数组中的一个元素和原序列中对应的两个元素关联(我的理解盲区)。这样,使用线段树时,对于(差分数组的下标)区间\([......
  • 矩阵树定理 记录
    矩阵树定理这玩意背一次忘一次,还是写一发吧。前置知识:行列式求值给定一个矩阵,定义一个\(n\)阶矩阵\(A\)的行列式为\(\detA=\sum_{p}(-1)^{\pi(p)}\proda_{i,p_i}\),其中\(p\)为一个\([1,n]\)的排列,\(\pi(p)\)为排列\(p\)的逆序对数。行列式中行和列是等价的,以下......
  • 【做题记录】2025刷题计划--线段树
    A.「SDOI2014」旅行给每个宗教开一棵线段树,树剖\(+\)线段树单点修改区间查询即可。Code#include<bits/stdc++.h>#definelllonglong#defineilinline#defineread(x){\ charch;\ intfu=1;\ while(!isdigit(ch=getchar()))\ fu-=(ch=='-')<<1;\ x=ch&1......
  • 【洛谷P1303】高精度乘法
    A*BProblem题目背景高精度乘法模板题。题目描述给出两个非负整数,求它们的乘积。输入格式输入共两行,每行一个非负整数。输出格式输出一个非负整数表示乘积。样例#1样例输入#112样例输出#12提示每个非负整数不超过10^{2000}。入坑OI这么久发现还没有写过......
  • 计算几何~三角形面积、点在三角形内、线段相交代码笔记
    多边形面积的基本公式:鞋带公式。强调多边形点集是按顺序存储;三角形面积基本公式:海伦公式;向量叉积公式;拓扑关系判断:判断点是否在三角形内;判断两条线段是否相交;代码笔记:#pragmaonce#include<iostream>#include<vector>#include<algorithm>#include<cmath>#in......
  • 2 矩阵键盘
    就是把一堆按钮并联集中,以扫描的形式读取数据,以达到节省I/O口的目的![[Pastedimage20250117160829.png]]1.读取按键编号至LCD通过不断对I/O口读取电平值来进行扫描以实现识别按键的功能#include<REGX52.H>#include"DELAY.h"unsignedintkeyNumber;unsignedintmart......
  • 【LeetCode】力扣刷题热题100道(31-35题)附源码 搜索二维矩阵 岛屿数量 腐烂的橙子 课程
    一、搜索二维矩阵编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性:每行的元素从左到右升序排列。每列的元素从上到下升序排列。可以使用从右上角开始搜索的方法来有效地找到目标值。选择起始位置:从矩阵的右上角开始。......