题目 题意:给定n个线段,长度m,每个线段有有左右端点 l i , r i l_i,r_i li,ri和权重 w i w_i wi,现要从这n个线段选出若干个出来,使得选出的选段能衔接在一起,连通1到m。两个线段可以衔接,当且仅当它们有公共相交区域。对于每个能连通1到m的线段组合,取权值的最大值和最小值,现要求找出一组线段,使得能连通1到m,且最大值和最小值的差值最小化。 参考 题解: 看了题解才悟了按权值排序的重要性。一开始思考往线段的左右端点排序去了。 我们将线段按权值从小到大排序,接着利用双指针的思想,固定l,求能连通1到m的最小的r。我们可以往线段数里边添加边,维护最小值,当线段树的根节点的最小值大于0,则说明已完全覆盖了。
注意一个点,[1,2]和[3,5]这两个线段是不能衔接的,因为它们没有公共交点。即,我们不能当前把这个题目当成区间覆盖问题。解决方式是把每个线段的右节点都减一即可,这样区间[1,2]和[3,5](实际为[1,3],[3,6])就实际是有衔接的了,注意也要把m减一。
线段树太久没写,懒惰标记都忘记加了_(:з」∠)_
#include
using namespace std;
const int maxn = 300010;
const int maxm = 1000010;
#define lson (rt
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?