P8968

太 nb 了。

不会博弈,不会推导,盲猜全部是同种电荷,此时神明的决策固定且易于刻画,对着样例模拟一下发现对了,写一发过了 easy ver,于是不管正确性直接来想 hard ver。

考虑向上跳的过程大致操作为 \(x\gets x+\min(x,a_i)\),直觉上不存在好的维护方法。

注意到每次如果 \(a_i\ge x\) 那么 \(x\) 翻倍,所以不会出现太多次这类操作。

运用类似全局平衡二叉树的思想,每次直接往上跳一段,使得贡献都是 \(+a_i\),这样做一次 \(x\) 翻倍,于是跳的次数 \(\mathcal O(\log V)\)。BIT 上倍增可以做到 \(\mathcal O(n\log n\log V)\)。没写,感觉过不去。

另一种思路是直接维护整个子树的答案,启发式合并,也是 2log,这个看起来还行,但是 set 的常熟有点恐怖。

还是用一开始的思路,这个比较有前途。然而接下来每一步我都不会。

冷静一下分析分析问题在哪:感受一下就是,\(x\gets 2x\) 这样的操作数量很少,用各种方法强行找出来的段其实大多仍然是无效的,我们考虑找一种方法直接把有效的段找出来啊啊。

我们这样做:泛化这个性质。考虑一个节点的两个子树 \(x,y\),若 \(x>y\) 那么无论如何都不会触发 Check Min,于于是直接把这个子节点往上合并。

然后考虑如果我们跳到一个 \(x\le y\) 的节点意味着什么:虽然我们的当前值无法分析,但是子树大小翻倍。于是时间复杂度为 \(\mathcal O(n\log V)\)

太深刻了我去。但是很外星人,均摊分析可以学习,构造方式不会啊啊。

posted @ 2024-04-18 18:51  ImALAS  阅读(6)  评论(0编辑  收藏  举报