这题实际上是考察了堆的插入与删除操作,用到的是大顶堆
有人用二分过的此题,我觉得二分的边界处理应该比较麻烦吧,尤其如果数据中出现有分数相同的,确实不好处理
比较直观的思想就是堆了。
我们首先按照分数来进行排序,排序后进行枚举,对枚举的每个位置,看该位置之前最小的n/2个需求与该位置之后的最小的n/2个需求的和是否满足要求。
实际上预先处理一下就可以了,先从头到尾进行扫,将每个位置的元素插入大顶堆中,如果个数不够n/2个直接插入,够了的话,就看根元素是否需要更新。
同理从尾扫到头。 这样就预处理了每个位置上之前最小的n/2个元素的和,之后的最小的n/2个元素的和
[cpp]
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include