- 关键发现:每次都使用分数最低的账号参赛需要维护所有账号的分数每次比赛后需要更新最高分
- 模拟策略:使用优先队列(小根堆)维护所有账号分数每次从堆顶取出最小分数的账号更新该账号分数后重新入堆维护当前最高分
- 具体步骤:初始化优先队列和最高分对每场比赛:取出最小分数加上比赛分数变化更新最高分将新分数入堆
#include <bits/stdc++.h>
using namespace std;
int main() {
int n, m;
cin >> n >> m;
priority_queue<int, vector<int>, greater<int>> pq; // 小根堆
int max_score = 0;
// 读入初始分数
for (int i = 0; i < n; i++) {
int score;
cin >> score;
pq.push(score);
max_score = max(max_score, score);
}
// 处理每场比赛
for (int i = 0; i < m; i++) {
int delta;
cin >> delta;
int min_score = pq.top(); // 取出最小分数
pq.pop();
min_score += delta; // 更新分数
pq.push(min_score);
max_score = max(max_score, min_score); // 更新最高分
cout << max_score << endl;
}
return 0;
}