E. Boring Segments (双指针 + 线段树)
题意:给出n条线段的左右端点和权值
, , 。要求选择一些线段,使得能够从数轴上的1出发,沿着线段走,能够到达m(连通,不是覆盖)。问选择的线段中最大权值与最小权值的差的最小值是多少。 , .
思路:
我们最终选择的线段中一定有一个权值最大的线段,相应的也一定有权值最小的线段,这两个极值的差将构成最终的答案,权值位于二者之中的线段对答案没有影响,所以我们可以都选上。有了这个考虑,思路就可以转换成枚举答案中权值最大最小的线段。
先将线段根据
至于如何判断线段[L,R]能将区间1~m连通,我们需要用线段树来维护。线段树里需要维护的信息有:该区间被添加了几次的计数变量add,同时还要有判断左右两个区间是否都被连通了的变量minn。在初始化和添加删除边的过程中add和minn维护的值并无差别,只是在回溯的时候minn = min(t[ls].minn, t[rs].minn),如果minn大于1,则说明左右两个子区间都被连通了,否则说明没有连通。所以想要判断1~m有没有连通,只需要看t[1].minn是否大于0即可。
还有一个细节,因为我们要判断1~m是否连通而不是覆盖,所以我们需要把边转换为点,将点理解成点i延伸向i+1的线段即可,所以m--,每个线段的右端点ri--,就可以判断了。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!