快乐的一天从AC开始 | 20210712 | P2251

题目链接

(暴露了鸽子本性,会补的会补的

今天开始写需求了,下午代码就写完了,调了一晚上没调好

心路历程

其实就是\(m\)遍区间最小值嘛,直接线段树/RMQ就可以\(O(n \log n)\)搞。

但是其实有\(O(n)\)的做法。

思路

单调队列。

首先是类似单调栈,加入元素的时候把前面大于它的都pop掉。可以这么想,后面的元素肯定比前面的元素晚pop,且因为要最小,所以新元素进来的时候,pop掉的都不可能是答案。

然后这样可以满足右端点的需求。

对于左端点,可以再维护一个指针指向单调栈的开头。加入元素的时候,一些开头的元素可能就不满足要求了,在加入元素之前不断移动左端点,把所有不满足区间限制元素pop掉。

(虽然复杂度优秀一点,但是相比线段树不支持修改操作

完结撒花。

posted @ 2021-07-15 00:12  _Backl1ght  阅读(44)  评论(0编辑  收藏  举报