传送门
思路:
首先将怪物按照血量排序,如果每次更改怪物的血量,时间复杂度过高,可以通过累积攻击力来等价结果,血量小于累积攻击力的怪物显示为死亡
注:可以通过二分查找直接查询位置,也可以暴力搜寻,然后计算下一轮攻击力,加入累积攻击力中,在计算下一轮攻击力时,是利用存活怪物的最小 p,那么,可以维护一个后缀最小值.
参考代码:
#include <bits/stdc++.h>
struct node {
int h, p;
node() {}
node(int x, int y) : h(x), p(y) {}
bool operator<(const node t) const { // 重载
return h < t.h;
}
};
bool cmp(node a, node b) {
if (a.h == b.h)
return a.p < b.p;
return a.h < b.h;
}
bool cmp1(node a, node b) {
return a.h < b.h;
}
void solve() {
int n, k0, k;
std::cin >> n >> k0;
std::vector<node> a(n + 1);
for (int i = 1; i <= n; i++)
std::cin >> a[i].h;
for (