首页 > 其他分享 >线段树区间加、区间乘、区间推平、区间取相反数的通用处理办法

线段树区间加、区间乘、区间推平、区间取相反数的通用处理办法

时间:2023-01-15 11:22:30浏览次数:41  
标签:推平 线段 一次函数 区间 相反数 视为

首先声明:“通用”并不是万能,只是能维护这些操作下的大多数常见的区间信息。

将数列中的每个元素视为一个一次函数 \(f_i(x)=k_ix+b_i\)。假设数列为 \(a\),则初始化 \(f_i(x)=0x+a_i\)。

区间加、区间乘操作可以视为将区间每个一次函数复合一个一次函数 \(g_j(x)=k_jx+b_j\),其中区间加 \(t_j\) 为 \(g_j(x)=1x+t_j\),区间乘 \(t_j\) 为 \(g_j(x)=t_jx+0\)。

对 \(g_j(f_i(x))\) 进行变形:

\[\begin{aligned} g_j(f_i(x))&=k_j(k_ix+b_i)+b_i\\ &=k_jk_ix+k_jb_i+b_i \end{aligned} \]

得到一个新的一次函数,这个一次函数的斜率和截距可以通过两个函数的斜率和截距很方便地求出。同时根据以上公式,容易知道(在不少题解中都讲不清楚的)加法和乘法的优先级顺序。

区间推平为 \(t_j\) 可以视为复合一次函数 \(g_j(x)=0x+t_j\),区间取相反数可以视为复合一次函数 \(g_j(x)=-x+0\)。

综上,区间加、区间乘、区间推平、区间取相反数等类似操作都可以视为线段树维护一次函数,并进行一次函数复合操作。

更一般地,线段树可以视为维护元素半群和操作半群的数据结构,因此可以进行较为通用的封装。

标签:推平,线段,一次函数,区间,相反数,视为
From: https://www.cnblogs.com/ruierqwq/p/segment-tree-note.html

相关文章

  • 区间dp模板
    该死的csdn登陆不上去了,为了防止区间dp模板丢失,在这里再存一份然后是左右取数字的问题,我记得20年的时候我应该看过这题,是有一个数列,前后取若干个数字,问先手能取最大值那......
  • 区间异或和异或区间最大值异或区间最小值
    区间异或和异或区间最大值异或区间最小值关键分治思想。也可以选择固定左端点,然后选择右端点代码#include<bits/stdc++.h>usingnamespacestd;constintinf=0x3f......
  • 【Pytorch】将矩阵中的元素按照区间重新赋值
    目录​​简介​​​​场景描述​​​​解决方法​​​​结语​​简介Hello!非常感谢您阅读海轰的文章,倘若文中有错误的地方,欢迎您指出~ ଘ(੭ˊᵕˋ)੭昵称:海轰标签:程序......
  • 算法学习笔记(51)——区间问题
    区间问题区间问题1.区间选点2.最大不相交区间数量3.区间分组4.区间覆盖区间选点题目链接:AcWing905.区间选点题目描述给定\(N\)个闭区间\([a_i,b_i......
  • 区间合并
    区间合并区间合并,顾名思义,就是将一系列能合并的区间合并核心代码voidmerge(vector<PII>&segs){intst=2e9,ed=-2e9;vector<PII>res;sort(segs.......
  • 区间 DP
    概述区间DP是以DP设计从区间出发为特点的一类DP。状态设计往往包含\(l,r\)。初始化通常为\(dp_{l,l}=w_l\)。转移则不一而同,看下面的详解吧。实现倒......
  • 连号区间数java
    小明这些天一直在思考这样一个奇怪而有趣的问题:在1~N的某个全排列中有多少个连号区间呢?这里所说的连号区间的定义是:如果区间[L,R]里的所有元素(即此排列的第L个到第R个元......
  • Luogu P2082 区间覆盖(加强版)
    链接难度:普及/提高-有\(n\)个区间\([s_i,t_i]\),求被这\(n\)个区间覆盖的长度。数据范围:\(n\le10^5,1\les_i<t_i\le10^17\)。把每个区间都换成一组匹配的括......
  • hdu: 张煊的金箍棒(3)(树状数组的区间修改,区间查询)
    ProblemDescription张煊的金箍棒升级了!升级后的金箍棒是由N段相同长度的金属棒连接而成(最开始每段金属棒的价值都是1,从1到N编号);张煊作为金箍棒的主人,可以对金箍棒任意......
  • 区间合并
    双指针区间合并离散化双指针通俗理解前缀和听起来好高级啊,那么他究竟是什么啊?双指针是通过某些方式优化复杂度,从而实现。接下来看几道栗子吧双指针给定一个长......