专栏文章

题解:P14598 [COCI 2025/2026 #2] 搭塔 / Tornjevi

P14598题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@mimzceb1
此快照首次捕获于
2025/12/01 18:01
3 个月前
此快照最后确认于
2025/12/01 18:01
3 个月前
查看原文
先考虑单次询问整个序列。
将答案放在每座塔中编号最小的积木处,那么如果 ii 记入答案,则需要找到一个 fi<if_i<i 满足 sfisis_{f_i}\neq s_i,且所有 fif_i 互不相同。
显然 si=Ps_i=\texttt{P}si=Cs_i=\texttt{C}ii 独立且对称,所以不妨认为 si=Ps_i=\texttt{P}。则所求转化为从序列中最多选出多少互相不交个 CP\texttt{CP} 子序列。这是一个经典问题,可以贪心地把 C\texttt{C} 看作左括号,P\texttt{P} 看作右括号,匹配上的括号对数即为所求。类似地处理 PC\texttt{PC} 子序列,可以做到 O(qn)O(qn)
事实上,将问题转化为括号匹配还有更好的性质。如果将右括号 ii 匹配的左括号作为 fif_i(失配则为 00),那么由括号匹配的性质,当查询 [l,r][l,r](即考虑对子串 s[l:r]s[l:r] 进行括号匹配)时:如果 fi<lf_i<l,则 ii 会失配;如果 filf_i\geq l,则 ii 也会匹配上 fif_i
先分别考虑 CP\texttt{CP}PC\texttt{PC} 进行括号匹配,那么查询 [l,r][l,r] 的答案即为有多少 lirl\leq i\leq r 满足 fi<lf_i<l。这是一个二维数点问题,容易离线树状数组/在线主席树做到 O((n+q)logn)O((n+q)\log n)

评论

0 条评论,欢迎与作者交流。

正在加载评论...