博客
关于我
线段树_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基于RESTful风格的接口自动化测试实战
    查看>>
    python基于flask搭建http服务(四)—— Docker容器化部署
    查看>>
    python基于flask搭建http服务(二)—— 实现Excel上传、数据清洗、入库
    查看>>
    python基于flask搭建http服务(三)—— 使用gunicorn部署项目
    查看>>
    python基于flask搭建http服务(一)—— 实现数据查询和Excel导出
    查看>>
    Python块键盘/鼠标输入
    查看>>
    python在心理学研究中的应用有哪些_心理学在线研究可用平台简介和应用进展
    查看>>
    python在使用HTMLTestRunner时,报告为空,错误提示<_io.TextIOWrapper name='<stderr>' mode='w' encoding='utf_8'>...
    查看>>
    python在gpu上运行_【python】python开启GPU加速
    查看>>
    Python在def函数中使用for循环
    查看>>
    Python在def函数中使用for循环
    查看>>
    Python在Conda环境中,但在Windows虚拟环境中没有激活
    查看>>
    python系列【仅供参考】:python pip 错误 ModuleNotFoundError: No module named pip._internal 解决办法
    查看>>
    python图像条状状噪声,使用PYTHON PIL从验证码图像中删除背景嘈杂的线条
    查看>>
    Python图像处理:从内存加载jpeg
    查看>>
    python固定后缀(名物化词汇)词频统计:抽取+统计+可视化
    查看>>
    python商品评论数据采集与分析可视化系统 Flask框架 requests爬虫 NLP情感分析 毕业设计 源码
    查看>>
    python商品数据分析可视化系统(带爬虫)京东销售数据分析 计算机毕业设计 源码下载
    查看>>
    python商品库存管理系统 django框架 商品网站 MySQL数据库 源码下载 计算机毕业设计
    查看>>