[噼昂!]fish(Pending)

壹、关于题目 ¶

不编了。

贰、关于题解 ¶

本来不是很想写这个题题解,因为没有打代码,然而因为这个复杂度计算很有意思,还是写一下。

暴力吃就是每次吃掉当前可以吃的最大的鱼。用 set 模拟即可。

优化就是一次吃掉一堆鱼,使得吃完这堆鱼之后满足下列条件之一就马上停止:

  • 刚好可以吃新的更大的鱼;
  • 达到最终要求;

优化的实现可以使用权值线段树,避免吃掉重复的鱼就打上一个虚拟标记表示这个区间的鱼都被吃掉了。

这个优化看似微不足道,实则可以让吃鱼的过程由 \(\mathcal O(n)\to \mathcal O(\log V)\). 至于为什么,显然,最多每吃两次可以让鱼的体积翻一倍,于是就证完了......

于是这个题 \(\mathcal O(n\log n\log V)\) 就做完了。

然而并没有代码......

posted @ 2021-10-08 15:57  Arextre  阅读(27)  评论(0编辑  收藏  举报