[ABC314G]
[ABC314G] Amulets
考虑如果 check
。
而本题显然不行。
有一个简单的性质:如果我们知道了最多可以打几只怪兽,那么带某种护身符的贡献是一定的,此时可以直接计算。
由于
我们可以考虑使用一个指针表示当前能够打的怪数量(为了方便,我们假定指针所指的前一个位置恰好是能打的最后一只),然后用一个数据结构维护前
这个数据结构就是我们维护第
考虑如果上堆的数更新,答案也要更新。
如果下堆的数比上堆大了,就换上去。
还要支持堆中元素的修改。
手写堆可以实现增加值的操作,但是下面的堆是大根堆,上面的是小根堆,并不适用。
如果要实现这个操作,只能开另外一个堆来表示临时删除,下次取堆顶就比较两堆。
这样一共四个堆,十分麻烦。
由于 multiset
支持修改数(找到、删除、插入新值),用其可以方便许多。复杂度还是
注意 long long
。(尽管血量并不会超,但是为了方便处理集合中的使用护身符的值)
code
本文作者:wscqwq
本文链接:https://www.cnblogs.com/wscqwq/p/17648283.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步