本题由于每一次操作都需要使用数组的最小值,因此我们可以使用小根堆或者multiset这种数据结构去模拟,具体的操作方式是每次弹出堆中/multiset中的最小值,然后加上bj,对于小根堆而言还需要维护一个变量来动态更新最大值,对于multiset而言可以直接使用`*rbegin()*来获取最大值
C++
小红是leetcode周赛的忠实玩家,他总共有n个账号,每个账号的分数分别为ai,现在我们记录了他m次的比赛记录,小红每次都会使用分数最低的账号参赛,请问小红每次参赛后,他的所有账号的最大得分是多少
输入包含三行
第一行两个正整数n,m(l≤n,m≤105),分别表示小红的账号个数和小红新参加的比赛记录数。
第二行n个整数ai(0≤ai≤109),表示小红每个账号目前的分数。
第三行 m 个整数bj(0≤bj≤109),分别表示小红每次比赛后,分数的变化值
(例如如果小红使用分数为 x的账号参赛,那么他在参加完第j场数的变化值。比赛后,该账号分数会变为x+bj。)
输出包含m行,每行一个整数,表示小红参与完第j场比赛后,他的所有账号的最大得分
输入
5 4
1145 1200 1300 1500 1600
10 270 450 500
输出
1600
1600
1650
1800
解释
第一次和第二次询问都加在1145上,数组变成 [1425,1200,1300,1500,1600],第三次和第四次分别加在1200和1300上