【JZOJ A组】矿石

版权声明:转载者乖乖♂站好 https://blog.csdn.net/Eric1561759334/article/details/82948817

Description

在这里插入图片描述

Input

在这里插入图片描述

Output

在这里插入图片描述

Sample Input

3 2
7 11
1 5
3 8
4
7

Sample Output

5

Data Constraint

在这里插入图片描述

思路

假设有y条线段是新加入的,有x条线段是经过点A的(意思就是说,有x条线段是只经过B而不经过A的)
那么在B处对答案产生的贡献是(2y-1)*2x
也就是说如果想要产生新的且与之前不重复的集合,那么就相当于必须选至少一条新加入的线段,然后和之前已经加入的线段进行枚举子集
至此就有一个优秀的O(n2)的做法了
不妨再稍微优化一下变成O(nlogn)的算法
首先把所有的线段按照左端点为第一关键字、右端点为第二关键字进行升序排序
然后扫一遍就行了
用堆维护一下经过当前点的线段,堆顶是右端点最小的
对于下一个点,只需要一直弹堆顶,就可以知道有多少条之前的线段是经过下一个点的了

代码

猜你喜欢

转载自blog.csdn.net/Eric1561759334/article/details/82948817