一、题目
二、解法
补充讲解一下可并堆,我们把重量都集中在左边,然后拿右边来合并即可。
可并堆板题,我们维护一个大根堆,每次把儿子的堆并到父亲上去,然后用父亲的领导力乘上最多选的个数来更新答案,容易发现如果一个堆中的元素和超过了 m m m,那么直接删去最大值,当前最大值不会用,以后更不会用,时间复杂度 O ( n log n ) O(n\log n) O(nlogn)。
#include <cstdio>
#include <iostream>
using namespace std;
#define ll long long
const int M = 100005;
int read()
{
int x=0,flag=1;char c;
while((c=getchar())<'0' || c>'9') if(<