首页 > 其他分享 >datastructure杂记

datastructure杂记

时间:2023-11-03 18:45:37浏览次数:35  
标签:标记 max sum hadd datastructure 杂记 split upd

线段树

线段树合并&&分裂

可持久化线段树

线段树分治

Seg—beats

兔队线段树

历史最值&&历史版本和

Q:维护一种数据结构,支持对数列 \(\{a\},\{b\}\) 的如下操作

  • 对 \(\{a\}\) 区间加,之后令 \(b_i\leftarrow \max(b_i,a_i)\)
  • 历史最大值,求 \(\max(b_{l\cdots r})\)

采用打标记的方式处理修改操作,考虑标记下放的操作对 \(b\) 序列的影响。

我们先不合并标记,设当前节点上的所有标记按下放顺序形成了一个队列 \(q\)。

为了方便这里约定 \(s[i]\) 表示到 \(i\) 之前所有加标记的前缀和,\(add\) 为加标记,\(hadd\) 为所有加标记中的最大值,\(mx\) 为当前最大值,\(hmx\) 为历史最大值。

对于核心操作 pushdown,我们把自己(now)的标记队列为 \(q_1\),父亲的标记队列为 \(q_2\),合并后的标记队列为 \(q_3\)。

考虑对历史最值的贡献:

\[\begin{split} hmx_3 &= mx_3 + \max_{i=1}^{|q_3|}s_3[i]\\ &=mx_3 + hadd_3 \end{split} \]

考虑对历史最大加标记的贡献:

\[\begin{split} hadd_3 &= \max_{i=1}^{|q_3|}s_3[i]\\ &= \max\{\max_{i=1}^{|q_1|}s_1[i],\max_{i=1}^{|q_2|}s_2[i]+s_1[|q_1|]\}\\ &= \max\{hadd_1,hadd_2+add_1\} \end{split} \]

历史和

Q:维护一种数据结构,支持对数列 \(\{a\},\{b\}\) 的如下操作

  • 对 \(\{a\}\) 区间加,之后令 \(b_i\leftarrow b_i+a_i\)
  • 历史和,求 \(\sum_{i=l}^r b_i\)

同样打标记处理,为了能更新,不妨把 \(b\) 序列的更新也作为一个标记 \(upd\)。

设 \(cnt\) 为队列中更新标记的个数, \(sum\) 为当前节点的区间和, \(hsum\) 为当前节点的历史和,\(add\) 为当前节点的加标记,\(hadd\) 为当前节点加标记的历史和,\(s[i]\) 为加标记的前缀和。

考虑标记对历史和的贡献:

\[\begin{split} hsum &= \sum_{i = 1}^{|q|}[q[i] = upd](sum+s[i]*len)\\ &=sum*cnt + len*hadd \end{split} \]

考虑合并两个队列:

\[\begin{split} hadd_{now} &= \sum_{i=1}^{|q_1|+|q_2|}[q_3[i] = upd]s_3[i]\\ &= \sum_{i = 1}^{|q_1|}[q_1[i] = upd]s_1[i] + \sum_{i = 1} ^{|q_2|}[q_2[i] = upd](s_1[|q_1|]+s_2[i])\\ &= hadd_1+add_1*cnt_2+hadd_2 \end{split} \]

复杂信息维护

标签:标记,max,sum,hadd,datastructure,杂记,split,upd
From: https://www.cnblogs.com/Lkkaknoi/p/17808194.html

相关文章

  • 【杂记】路在何方2023.11.1
    精神状态未知,今天考完了人机对话,期中考试将在一周后进行​。这几天进行了多科模拟考试,分数平平无奇,而今晚的物理成为击倒我的最后一枪​,轻舟已撞大冰山TAT​分析:物理的计算是我的强项,但是选择题错的太多,​主要弱点是分析电路故障,​以及对概念的理解不清。回想过去的两个月,我浪费......
  • C++基础杂记(2)
    将数组传入函数禁止修改数组的值函数的地址与函数的指针函数的指针数组函数的static与inline引用左值和引用传参C++11的数组for循环64位Linux操作系统中C++中常见基本类型所占字节数C++11类成员变量的初始化默认成员初始化器成员变量初始化列表委......
  • C++基础杂记(3)
    类的继承基类与派生类之间的构造行为在派生类中使用基类方法protected的访问权限多态公有继承关键字virtual示例抽象基类(ABC)私有继承和保护继承多重继承类的继承基类与派生类之间的构造行为派生类可以调用基类的公共成员,但无法调用基类的私有成员。所......
  • misc杂记
     用stegsolve打开找到隐藏的二维码 识别出来一长串16进制 有flag1.py等,考虑是一个pyc文件反编译之后查看源码 发现函数没有调用,所以无输出,手动给他加上  stegsolve打开发现有二维码,不完整,010editor看到有一个url打开之后是另一张看起来一样的图,用bcompare比......
  • 杂记 | 恍然临二十三度春秋
        不知不觉中我的生命已经走过了二十二个春秋,这二十二载回望仿似大梦一场,无一作为,个中时日竟都禁不得细想,全然虚废了青春年华。  初初来时影作伴,而今回顾日当空。别阳关,故人熙熙攘攘,利来利往。只是尚不知人事,出口成祸,害了几多时光。最无奈待明白,人已去了。  幸而后路......
  • Linux命令杂记
    可能不是很有序,但都是实用命令,不会面面俱到,多了容易记不住find:查找文件命令。用法:find路径选项搜索内容递归搜索当前目录下的stdio.h文件gcc:编译。流程常用选项......
  • 记录--H5页面对接微信支付踩坑杂记
    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助背景应用背景:vite搭建的vue3项目需求背景:功能都涉及了支付业务,故需要和外部支付系统对接外部支付系统:聚合支付、微信小程序支付、微信H5支付目录读完本文,你将会对以下几个坑点有所了解:对接第三方服务商过......
  • InstallshieldX安装制作杂记(实例之安装完成)
    作者:fbysss   我们可以看到,很多软件在安装完成之后,可以有一些选项,比如“查看ReadMe”,“运行程序”等等,这是怎么做到的呢?关键词:OnMoved、SdFinish    1.InstallShieldX脚本中有一个OnMoved事件。这个事件在需要安装的文件拷贝完成之后触发;   2.SdFinish是一个标准对话......
  • InstallShield X制作安装程序杂记(7.Behavior and Logic节点)
    1.InstallScript(安装脚本):安装文件是InstallScriptProject的重头戏,可以通过编写安装脚本文件,来对安装程序进行深层次的处理。其中提供了一些标准函数、事件,也可以自定义函数,代码风格有点类似C。如何使用脚本来“滋润”安装程序,后文将用专门篇幅实例说明。2.SupportFiles/Bi......
  • InstallShield X制作安装程序杂记(6.Server Configuration节点)
    1.InternetInformationServices(IIS配置):主要是给Web项目制作使用的。       这里有一个根IISConfiguration,右键->Addwebside(建立web站点),建立站点时候,可以在站点上面建立虚拟目录(NewVirtualDirectory)。右边的Key-Value表中有很多条目,只要你会设置IIS,这些都是小菜......