线段树区间取max黑科技
2016-07-07 16:50
302 查看
Preface
在训练中我们常常会遇到这样一种猥琐的数据结构操作:区间取max,即将区间内小于lim的数改成lim。在这里我做一些总结。这里只讨论线段树,分块和其它数据结构类似。
Text
Case 1
要求:兹瓷区间max,还有其它各种普通操作,查询区间和特殊性:数值满足单调性
Solution:由于单调性,我们可以在线段树上二分出小于lim的区间,然后就变成了一个区间赋值(set)操作。
Case 2
要求:兹瓷区间max,区间加,查询极值Algorithm 1
维护标记up,add一个数x真实值为max(x+add,up)
∙区间max:
max(max(x+add,up),lim)=max(x+add,max(up,lim))
直接更新up标记即可
∙区间加
max(x+add,up)+delta=max(x+add+delta,up+delta)
更新add、up标记
Algorithm 2
还是相同的标记,不过x真实值为max(x,up)+add∙区间加
max(x,up)+add+delta=max(x,up)+(add+delta)
直接更新add标记
∙区间max:
max(max(x,up)+add,lim)=max(max(x,up),lim−add)+add=max(x,max(up,lim−add))+add
直接更新up标记
参考Werkeytom_FTD的blog:http://blog.csdn.net/werkeytom_ftd/article/details/51077590
Case 3
要求:兹瓷区间max,查询区间和没有特殊性
参考WC2016中C_Sunshine和jiry_2的课件《Segment tree Beats!》
维护最小值次小值乱搞,时间复杂度log22。
相关文章推荐
- 基于scrapy框架的关于58同城招聘网站信息的爬取
- 16.7.7比赛总结
- C++基础8【难】 回顾:数组指针,函数指针,函数指针做函数参数 C语言多态
- Linux基础篇--GCC编译器
- 磁盘压缩卷只能压缩一半
- 设置TOMCAT启用GZIP压缩
- 【spring 配置文件】spring配置文件的解析
- Linux - tomcat
- 网站开发常用辅助工具
- 编译原理
- Centos7安装完毕后无法联网的解决方法
- 时间差
- 欢迎使用CSDN-markdown编辑器
- group_concat()用法
- Swift 使用Extension 场景 浅析
- Android 如何使用juv-rtmp-client.jar向Red5服务器发布实时视频数据
- A letter to a good guy in USA
- log4j简单使用
- lintcode:玩具工厂
- Android Studio 使用 OpenCV 的配置方法