题解:P10464 Task
题目传送门
思路:
首先我们可以知道要把机器与任务降序排序,以 \(x\) 为第一关键字,\(y\) 为第二关键字排序。
然后我们就要在任务上选择权值 \(x\) 的机器。
怎么样快速地把机器与任务排序呢。SORT 是不行的,因为 \(1 \le N \le 100000\),\(1 \le M \le 100000\)。但是我们可以用计数排序啊,因为 \(1 \le x \le 1440\),\(1 \le y \le 1440\)。所以我们可以建立两个 vector 二维数组来存储并排序任务与机器。
怎么找出不小于权值 \(y\) 的最小数呢,不防用 set 的 x.lower_bound 用来寻找。在这里介绍一种数据结构 multiset:你可以把它看组一个序列。插入一个数,删除一个数都能够在 \(O(logn)\) 的时间内完成,而且它能时刻保证序列中的数是有序的。而且序列中可以存在重复的数。但 set 中的元素只能出现一次。而且 multiset 也可以使用 x.lower_bound。
注意:
- 记录获得的收益的变量一定要用 long long。
 - 一定是逆序。
 - 获取到小于权值 \(y\) 的最小数后记得用 
x.end()判断此数是否存在。用完后记得删除。 

                
            
浙公网安备 33010602011771号