博客
关于我
线段树_CF603div2_E.Editor
阅读量:185 次
发布时间:2019-02-28

本文共 1279 字,大约阅读时间需要 4 分钟。

传送门: 题意: 给你一串操作字符串 L,R代表光标往左,往右位移。其他字符代表在光标所在处写字符。对于每次操作,问你当前括号匹配是否合法,若不合法,输出-1 若合法,输出括号嵌套的最深层数。

例如: Sample input: 7(R(R)R)

Sample Output: -1 -1 -1 -1 -1 -1 2

从看题到写题花了一个多小时,写完才发现一个很重要的问题,树状数组不能维护带修改的前缀最大值,SB了。。。

思路: 我们假设'('为1,')'为-1,使用线段树维护前缀和,线段树上每个叶子结点代表一个前缀和。那么出现一个'(',我们就对[num, len]进行区间+1操作,出现')'对区间[num, len]进行区间-1操作,记得判断改变的时候原来若是'(',就应该对[num, len]进行区间-1操作,出现')'对区间[num,len]进行区间+1操作。

只要判断最后一个结点是不是0,并且所有的前缀和最小值大于等于0,就证明是合法的,所有的前缀和的最大值就是答案不合法就负一。

收获: ①判断括号匹配是否合法的新方法 假设'('为1,')'为-1,查前缀和即可. 如果要动态修改,拿树状数组或线段树维护

②树状数组的缺陷 无法拿树状数组来维护带修改的前缀最值.

③线段树维护前缀值 利用类似差分的思想,将点修改 改成 当前点到最后的区间修改即可。

现在,我来详细解释一下这个问题的解决方案。

首先,我们需要一个数据结构来维护括号匹配的状态。这里可以采用线段树来维护前缀和,因为括号匹配问题可以通过前缀和的符号来判断是否正确嵌套。

具体来说,我们将'('转为+1,')'转为-1。这样,每当我们遇到一个新的'('时,前缀和的值会增加1,遇到一个')'时,前缀和的值会减少1。通过线段树,我们可以对特定的区间进行区间更新,同时查询前缀和的最小值和最大值。

接下来,我们需要处理每一步操作:

  • 如果操作是L或R,光标会移动相应的位置,不需要改变括号状态。
  • 如果操作是'('或')',我们需要更新光标位置,并根据括号类型对相应的区间进行线段树的区间更新。
  • 然后,我们需要检查括号匹配是否合法:

    • 对于每一步操作,检查线段树中的前缀和的最小值是否大于等于0。如果有任何一个前缀和小于0,说明括号匹配不合法。
    • 如果所有前缀和都非负,并且最后一个前缀和为0,说明括号匹配合法。

    如果括号匹配合法,我们需要找出括号嵌套的最深层数。这里可以通过查询线段树中的前缀和的最大值来确定最深的嵌套层数。具体来说,最深的嵌套层数等于前缀和的最大值。

    需要注意的是,线段树需要支持区间更新和前缀查询。因为括号匹配的状态是前缀相关的,所以我们需要在线段树上进行点更新或区间更新。

    在实现过程中,我们可以使用一个数组来记录当前括号的状态,每次遇到'('或')'时,更新对应的位置,并通过线段树维护前缀和的值。

    总结来说,解决这个问题的关键在于:

  • 将括号问题转化为前缀和的问题。
  • 使用线段树来高效维护和查询前缀和。
  • 每一步操作后,检查括号匹配的合法性,并记录最深的嵌套层数。
  • 转载地址:http://zxdi.baihongyu.com/

    你可能感兴趣的文章
    MySQL的使用
    查看>>
    mysql的全文检索的方法
    查看>>
    MySQL的函数
    查看>>
    mysql的函数DATE_ADD()
    查看>>
    mysql的函数操作
    查看>>
    mysql的分类排名_mysql高低排名
    查看>>
    Mysql的分表设计方法 (水平分表和垂直分表)
    查看>>
    mysql的分页查询limit关键字
    查看>>
    MySql的创建数据表、约束、外键约束的创建修改删除、级联操作
    查看>>
    MySQL的删除修改的实验目的_基础篇 - 数据库及表的修改和删除
    查看>>
    MySQL的四大隔离级别,你都知道哪些?
    查看>>
    MySQL的四种事务隔离级别
    查看>>
    MySQL的基本命令
    查看>>
    Mysql的备份与恢复类型
    查看>>
    mysql的大小写对性能的影响问题
    查看>>
    mysql的密码管理、mysql初始密码查找、密码修改、mysql登录
    查看>>
    mysql的常见八股文面试题
    查看>>
    MySQL的常见命令
    查看>>
    mysql的引擎以及优缺点_MySQL有哪些存储引擎,各自的优缺点,应用场景-阿里云开发者社区...
    查看>>
    MySQL的操作:
    查看>>