首先,与环有关的问题,最基本的思路就是段环成链。因为连接 x,yx,y 的圆弧,一定不会选择穿过环上的最大值,所以可以去掉环上最大值并把环拆成链,最后重新算一遍最高点的贡献即可。

不难发现,将 xx 作为较低点,它能连结的点有左边第一个比它大的点和右边第一个比它大的点,于是想到单调栈。但是这样有一个问题,如果单调栈中出现了相同元素,那么点 xx 还能连接到所有与 xx 大小相同的点。所以还要特殊处理这一类点。单调栈进行的过程中始终保持序列的递减,那只用用 xx 替换栈内元素时,维护一个 ss 数组如果遇到相同元素,则通过累加得到与 xx 相同的元素个数即可。准确的说,是 xx 向左边拓展,在遇到比它大的点时停下,中途遇到与 xx 相等的元素的个数。

然后对于换上的最大值,我们直接单独统计即可,复杂度O(n)O(n),如何计数相同数也可以使用二分。

0 条评论

目前还没有评论...