专栏文章
Histogram Sequence
P14630题解参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mimz253z
- 此快照首次捕获于
- 2025/12/01 17:53 3 个月前
- 此快照最后确认于
- 2025/12/01 17:53 3 个月前
钦定一个区间中最左边的最小值起贡献。容易单调栈求出每个位置 起贡献的区间 。
先考虑简化版问题,即 。考虑一个归并排序的过程,即先对于一个 ,把它起贡献的区间的权值从小到大排序,再把 个数组归并。由于 固定所以只需要对长度排序。我们对这些长度去重并记录出现次数 。然后把所有 当前的最小长度放进一个堆维护。每次取出堆顶并输出 次当前权值,然后将当前决策弹出堆并加入当前决策的后继决策。
当 的时候,考虑先二分找到排名为 的权值 ,二分时的
check(v) 函数应当能够返回 的权值个数,那么我们就知道 需要输出几次。若次数超过 就直接输出并结束程序。否则对于每个 ,取出权值大于 的部分进行上面那个归并即可。现在我们需要知道如何计算一个 有多少个长度 的贡献区间。先考虑长度 的。若不考虑 的限制,那么可取的左端点为 。那么加上限制之后左端点的取值区间应当为 。个数容易计算。接下来还要对这玩意求个前缀和,分类讨论把 和 拆开分段计算即可。
认为 同阶,时间复杂度 ,空间复杂度 。
相关推荐
评论
共 0 条评论,欢迎与作者交流。
正在加载评论...