【备战秋招】7月27日-KDXF-第一题-购房之旅

在线测试本题

购房之旅

题目描述

塔子哥有 n n n 个朋友,每个朋友有一定数量的金币,现在他们要购买房子,一共有 m m m 个房子,每个房子有两个参数:舒适度和价格,当一个人的金币大于等于一个房子的价格时,才可以购买房子,且要满足以下条件:

  1. 一个人至多购买一个房子。
  2. 一个房子至多被一个人购买。

现在塔子哥想知道 n n n 个朋友购买的房子的舒适度之和最大可能是多少?

输入描述

第一行两个整数 n n n m m m

接下来一行 n n n 个数,第 i i i 个整数 x x x 表示第 i i i 个人的金币 x x x 1 ≤ x ≤ 1 0 9 1 \leq x \leq 10^9 1x109

接下来 m m m 行每行两个整数表示每个房子的舒适度 a a a 和价格 b b b 1 ≤ a , b ≤ 1 0 9 1 \leq a, b \leq 10^9 1a,b109 1 ≤ n , m ≤ 2 × 1 0 5 1 \leq n, m \leq 2 \times 10^5 1n,m2×105

输出描述

输出一个数表示最大可能的舒适度之和。

示例 1

输入

2 2
2 2 
2 2
2 2

输出

4

题解

贪心

对于每个房子按照舒适度排序从大到小排序,对于其价格 x x x,找到所有人中持有的金币第一个 $ \ge x$ 的(用二分实现),表示最适合买当前房子的人,并将其删去即可。

在cpp中动态删除和二分的过程可以用 multiset 来实现

整体时间复杂度: O ( n log ⁡ n ) O(n \log n) O(nlogn)

代码见网站内部(文章顶部):塔子哥的文字题解

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

塔子哥学算法

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值