题解:P10464 Task

题目传送门


思路:

感谢 Rosayattp02 提供的思路。

首先我们可以知道要把机器与任务降序排序,以 \(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() 判断此数是否存在。用完后记得删除。
posted @ 2025-07-26 18:51  WMWD  阅读(4)  评论(0)    收藏  举报