博客
关于我
线段树_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/

    你可能感兴趣的文章
    Python 内置时间模块
    查看>>
    python 内部如何实现命名元组?
    查看>>
    python 写入json数据到数据库
    查看>>
    Python 列表删除相同的元素
    查看>>
    Python 初学者需要知道的四条建议
    查看>>
    Python 判断字符串是否包含子字符串
    查看>>
    python 判断当前时间是否为零点
    查看>>
    python 利用pandas读取本地中CSV文件的指定列 列名重命名 并保存回本地
    查看>>
    python 利用pyspark读取HDFS中CSV文件的指定列 列名重命名 并保存回HDFS
    查看>>
    python 利用pyttsx3文字转语音
    查看>>
    python 利用已有Ner模型进行数据清洗合并
    查看>>
    python 到大数据开发工程师_如何成为一个大数据开发工程师?
    查看>>
    python 加密解密(base64, AES)
    查看>>
    Python 和Java 哪个更适合做自动化测试?
    查看>>
    python 图片转ico
    查看>>
    python 图片转文字、语音转文字、文字转语音保存音频并朗读
    查看>>
    python 在包含类似字符\x16、\x12、\x某某的数组中将以\x开头的字符找出来的方法
    查看>>
    Python 在并行进程之间共享字典
    查看>>
    Python 垃圾收集器文档
    查看>>
    python 基于 wordcloud + jieba + matplotlib 生成词云
    查看>>