首页 > 其他分享 >线段树好题汇总(持续更新中)

线段树好题汇总(持续更新中)

时间:2023-11-20 21:33:53浏览次数:32  
标签:二分 线段 汇总 离散 树好题 端点 区间 我们

线段树作为信息竞赛中最为常用的数据结构之一, 常常是区分非竞赛选手和竞赛选手的显著标志
其中最为有趣的就是有关区间可加性的探讨, 这里将会放一些我自认为可以学到东西的线段树题目,
同时也会附赠上自己的一些思考, 助读者加深对线段树的理解

Educational Codeforces Round 23: F.MEX Queries

线段树二分/懒标记线段树

Codeforce题目链接

解读:

本题本质就是实现区间赋值(全部赋值为0/1), 以及区间反转(区间异或1), 同时每一次操作之后都要找到第一个0的位置

难点1

因为是对于整个区间找到第一个0的位置, 那么很轻松就可以联想到线段树上二分, 但是我们要利用什么"信息" 进行二分呢?
常见的信息: 区间最值
例如我们要找第一个小于k 的位置, 那么可以对于当前区间[l, r]

  1. 查询[l, m) 的最小值是否是k, 如果是的话自然就可以从[l, m)向下递归
  2. 否则递归[m, r) 继续查找

这里可以看出线段树上二分其实是利用维护的"信息"进行"排除区间"的过程
回到本题, 我们试图利用区间最小值来实现找到第一个0, 这样可以找到吗? 当然可以, 但是却忽略了一个
重要的问题, 那么就是我们利用的"信息" 必须是可以维护的, 区间最小值无法在题目要求的反转操作下维护!
所以我们转而利用区间和 来找, 发现是可以的!(如果当前的区间和不等于区间长度, 那么说明这个区间有0)

难点2

我们想要设计懒标记来维护区间赋值, 那么自然地就可以这样设计

Tag = 1 -> 区间赋1
Tag = 0 -> 区间赋0
Tag = 2 -> 区间异或1

但是回归到我们老生常谈的话题, 解决懒标记下放问题, 重点就是解决懒标记相遇问题!
这里稍微分类讨论一下即可

难点3

这里操作区间范围是\(10^{18}\)
解决大区间问题我们就有两种选择, 动态开点线段树, 以及离散化后线段树
这里内存给的比较紧, 动态开点会MLE, 所以应该选择离散化 (如果大区间是\(10^9\) 的话 动态开点比较稳妥, 但是这里过大, 个人认为还是直接选择离散化为好)
但是我们最后要二分的是位置! 那么我们离散化中必须包含我们要二分的答案
这里分析一下, 发现我们的答案只可能是以下三种

  1. 最小的整数1, 比如我们一堆左右端点都很大的区间, 那么不管咋操作, 答案都是1
  2. 区间的左端点: 因为如果我们执行赋0操作, 假设答案在这个区间内, 那么肯定选择左端点更优
  3. 区间的右端点加1: 如果我们执行区间赋1操作, 假设区间左端点到1全部已经选上了, 那么最小的答案肯定是右端点加1

所以我们将这三类值, 加上区间左右端点一起进行离散化, 就完成了!

标签:二分,线段,汇总,离散,树好题,端点,区间,我们
From: https://www.cnblogs.com/xingon/p/17844910.html

相关文章

  • 团队项目4——项目冲刺汇总
    团队项目4——项目冲刺汇总团队项目合集[10]团队作业1--团队展示&选题团队作业2--《需求规格说明书》团队作业3--需求改进&系统设计团队项目4--敏捷冲刺第一篇团队项目4--敏捷冲刺第二篇团队项目4--敏捷冲刺第三篇团队项目4--敏捷冲刺第四篇团队项目4-......
  • PMP考试地点汇总,建议收藏!
    PMP®考试与其他考试有所不同,因为这个考试的主体考核方是在国外,它并不是我国的认证证书。PMP®认证是一种国际化的认证。我国国家外国专家局于1999年引进了PMP®认证。PMP®认证是项目管理专业人士资格认证,它的主要考试内容就是项目管理体系知识。  PMP®考试的考试地点是这样。......
  • C++第三方库汇总
    图像处理:OpenCV矩阵运算:Eigen图像读写:stb_image,广泛应用于Graphics领域文件解析json文件解析:RapidJson,参考:https://www.geeksforgeeks.org/rapidjson-file-read-write-in-cpp/glTF文件解析:cgltf......
  • 第 372 场周赛(位运算技巧,跳表 + 二分,线段树)
     classSolution:deffindMinimumOperations(self,s1:str,s2:str,s3:str)->int:cnt=0fora,b,cinzip(s1,s2,s3):ifnota==b==c:breakcnt+=1ifcnt==0:......
  • 7篇 Scrum 冲刺博客汇总
    作业概述这个作业属于哪个课程软件工程这个作业要求在哪里团队作业4——项目冲刺这个作业的目标项目冲刺博客汇总博客汇总博客名称博客链接第1篇https://www.cnblogs.com/machuze/p/17841959.html第2篇第3篇第4篇第5篇第6篇......
  • [学习笔记]主席树(可持久化权值线段树)
    主席树简介主席树,全称为可持久化权值线段树。有的人不知道什么是可持久化,其实很好理解,就是某个mhy游戏最早是1.0版本,至今到了4.2版本,可持久化就是可以在1.0~4.2版本间任选一个版本出来进行修改。例题1P3919【模板】可持久化线段树1(可持久化数组)题意分析需要写一......
  • django 如何查询汇总的求和时避免没有数据导致的错误
    django如何查询汇总的求和时避免没有数据导致的错误在Django中,如果你希望对某个字段进行求和操作,并在没有数据时返回默认值,可以使用aggregate结合Coalesce函数。Coalesce函数用于返回参数中的第一个非空值,这样你可以在没有匹配项时设置默认值。以下是一个示例:fromdjan......
  • 边缘计算网关有哪些应用场景?边缘计算网关应用场景大汇总
    边缘计算技术是指在靠近设备或数据源头的一侧,就近提供数据分析处理服务。通常由边缘计算网关或计算终端实现,能够实现更快的设备/服务响应,满足各行业在实时业务、应用智能、安全与隐私保护等方面的需求。本篇就为大家简要总结介绍一下边缘计算网关的常见应用场景。  1、智能......
  • 插槽(slot)用法汇总
    什么是插槽简单来说就是子组件中的提供给父组件使用的一个坑位,用表示,父组件可以在这个坑位中填充任何模板代码然后子组件中就会被替换成这些内容。比如一个最简单插槽例子<!--父组件--><template><div><Child>HelloJuejin</Child></div></template><scriptse......
  • Airtest:各平台的剪切板功能汇总
    此文章来源于项目官方公众号:“AirtestProject”版权声明:允许转载,但转载必须保留原链接;请勿用作商业或者非法用途1.前言一直以来,大家都还挺关注Airtest是否有剪切板功能的。从Airtest1.3.1版本起,我们新增了Android、iOS设备的剪切板功能,自此,3大平台的剪切板功能就齐全啦。......