https://atcoder.jp/contests/abc127/tasks/abc127_d
题意:有n个数字,m次操作,每次操作可以吧最多Bi个数字值替换成Ci,找出操作后最大可能的数字和。
思路:首先可以发现可以通过巧妙的选择方法,使2次操作较换位置后结果依然最大。那么先把操作按Ci从大到小排序,每次枚举i找有几个数满足它们的值都满足比Ci小。若有k个数满足,k>Bi时,找最小的Bi个的值转成Ci;k<=Bi时,把那k个数的值转成Ci,退出(更改完后一定满足所有a值都不小于Ci,而Ci+1<=Ci,所有之后的k值一定是0,不需要再更改了)。a的值可以用muntiset储存,找最小和加入最新都方便。
#include<cstdio>
#include<string>
#include<cstring>
#include<utility>
#include<cmath>
#include<map>
#include<queue>
#include<set>
#include<algorithm>
#include<vector>
#include<iostream>
#define ll long long
#define pii pair<int,int>
#define mp make_pair
#define