B. Incinerate (二分,后缀最小值)

该文章介绍了一种处理怪物战斗的算法,首先按怪物血量排序,然后通过累积攻击力来判断怪物是否死亡,使用二分查找优化查询效率,并维护后缀最小值以计算下一轮的攻击力。在不断更新攻击力的过程中,直到所有怪物被击败或攻击力不足。
摘要由CSDN通过智能技术生成

传送门

思路:

首先将怪物按照血量排序,如果每次更改怪物的血量,时间复杂度过高,可以通过累积攻击力来等价结果,血量小于累积攻击力的怪物显示为死亡

注:可以通过二分查找直接查询位置,也可以暴力搜寻,然后计算下一轮攻击力,加入累积攻击力中,在计算下一轮攻击力时,是利用存活怪物的最小 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 (
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值