线段树
文章平均质量分 86
crazy__sea
擅长C++、Java
展开
-
线段树进阶
线段树扩展首先大家需要先学会最普通的线段树,下面开始扩展。1. 线段树维护状态比如说矩阵乘法之类的东西。考虑线段树分治、合并的过程,假如我们存在一个满足结合律的东西(比如说矩阵乘法或一些dp),我们可以使用线段树维护。再比如说区间最大子段和,我们发现这里的状态数满足结合律的。2. 线段树动态开点这东西还是挺常用的。比如说现在有 nnn 棵 mmm 大小的线段树,如果朴素的做的话复杂度起步 O(nm)O(nm)O(nm),无法接受。我们可以只保留有用的点。比如说我们在某一棵线段树上进行了一次原创 2022-02-14 22:22:08 · 319 阅读 · 0 评论 -
JZOJ 4319. Lucas的数列
JZOJ 4319. Lucas的数列看到这道题,因为需要支持区间查询,所以……算法一:暴力具体过程不细讲。期望得分:30分。算法二:莫队(不会的跳过吧)针对题目给的公式:p=∑i=1mximp=\frac{\sum_{i=1}^mx_i}{m}p=m∑i=1mxi和s=[∑i=1m(xi−p)2]×ms=[\sum_{i=1}^m(x_i-p)^2]\times ms=[i=1∑m(xi−p)2]×m我们可以将其展开,得到:s=[∑i=1mxi2−2∑i=1mxi×p+m×原创 2020-08-05 19:46:31 · 353 阅读 · 1 评论 -
JZOJ 1495. 宝石(附加扫描线讲解)
JZOJ 1495. 宝石题目大意:给你N个(K+1)×(K+1)(K+1)\times(K+1)(K+1)×(K+1)的正方形以及他们左上角的那个顶点的坐标和它的权值,求最大的覆盖的权值。这一题可以用二维前缀和做,但是无法拿到满分。满分做法:扫描线。假如现在有这么两个长方形,权值都为1(不要问为什么是长方形,这里只是为了方便讲解而已),它们摆放如图:首先,我们把所有竖着的线给找出来。然后,我们就可以分别算出下面三个区域的最大覆盖权值了。我们可以把所有的线按横坐标小到大排序,将这个几何图原创 2020-08-11 21:58:39 · 116 阅读 · 0 评论 -
主席树略讲
主席树首先必须会线段树并且会动态开点才能看该博客。众所周知,线段树长这样主席树,又称可持久化线段树,因为它支持历史查询,就像这样:现在有一个序列,原始版本:[1,2,3,4]1:将原始版本2号点增加3,成为1号版本:[1,5,3,4]2:查询1号版本区间1~3的和:93:将1号版本3号点增加3,成为2号版本:[1,5,6,4]4:查询原始版本区间1~5的和:105:将1号版本4号点减少1,成为3号版本:[1,5,3,3]…而这些,我们都可以用主席树维护。由于每一次只会改变一个点,所原创 2020-08-11 19:46:08 · 127 阅读 · 0 评论