题解 CF653F Paper task

这个题适合练习 SAM。

本质不同的子串有两种想法。一种是哈希,这里哈希很难判断括号串是否合法。还有一种是后缀数据结构,所以可以先用 SAM 将本质不同的子串搞出来。对于 SAM 上一个节点,就是一个以 r 为结尾,l 在一个区间内的所有子串。现在只用判断这些串是否都合法即可。

这不是难点。考虑从后往前看,遇到一个 ) 就使 sumi=sumi+1+1,遇到一个 ( 就使 sumi=sumi+11。这样一个子串 s[l,,r] 合法当且仅当 i[l,r],sumisumr+1suml=sumr+1。那么我们预处理出 prei 表示左边离 i 最近的满足 sumj 值小于 sumij,查询时直接求左端点与 prer+1max 后的区间最小值和最小值出现次数即可,线段树维护。

时间复杂度 O(nlogn)

posted @   Terac  阅读(1)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话
点击右上角即可分享
微信分享提示