CF1762F 题解

把选的子序列的 \(a_i\) 画下来,走折线显然是不优的,因此选的子序列一定单调。

我们只考虑统计单调不减的,单调不增的话把数取反就行。最后算答案就是把这两部分想加然后去掉算重的:相等 的部分。

\(f_i\) 表示 \(l=i\) 的合法 \((l,r)\) 数量,令 \(j\)\(i\) 后第一个能接上的数。那么拼上这个 \(j\) 显然不会让 \(i\) 原本具有的答案没有计算,因为拼上去显然还是合法的。同时也不会多算,因为 \(f_j\) 的定义天然就让 \(j\) 后面的数满足性质。但是如果不拼呢?这一部分就是 \([a_i,a_j)\) 的部分,统计后加进去即可。

那么 \(f_i=f_{{nxt_i}}+cnt_i\),其中 \(nxt_i\) 为对应 \(j\)\(cnt_i\) 为后面在 \([a_i,a_{nxt_i})\) 内的数。

\(cnt\) 数组如何计算?直接上线段树维护即可。再不济按照值域做扫描线一个一个插数也是可以做的。

posted @ 2025-08-02 15:22  v1ne0qrs  阅读(4)  评论(0)    收藏  举报