奇妙的数列(单调栈)

即:

题解

我们分析一下条件,

bj <= bi <= bn 什么意思? 说明bj和bi都不超过bn,那么首先可以确定范围

bi可以在bj~bn的范围内任意波动,设bm是bn左边第一个严格比它大的数,那么j只能在m+1~n内取值。

然后可以用反证法证明bj就是m+1到n中的最小值。

那么可以用一个单调递减单调栈来算每一个m,然后设第i个元素的“m”为Ai,不难发现,新加进栈里的 i 的Ai就是弹出的所有A和 i 中b值最小的那个(标号),即每次(从后往前)弹出标号j时,A_i=(b_j <= b_{A_i}\; ?\; j:A_i);

这样就可以求出答案了,总复杂度O(n)。

代码

被狗吃了(找不到题)

posted @ 2020-01-19 20:03  DD_XYX  阅读(67)  评论(0)    收藏  举报