维护括号序列 Replace(i):

将第i个位置的括号反向。

Check:测试当前序列是否合法。

题解

    将左括号定为1,右括号定为-1,所以只需要满足前缀和序列没有负数即可,即最小值

    为正即可,第i个括号反向,就是该位置----n减2或者加2

  1. #include<cstring>
  2. #include<cmath>
  3. #include<iostream>
  4. #include<algorithm>
  5. #include<cstdio>
  6.  
  7. #define N 30007
  8. using namespace std;
  9.  
  10. int n,q;
  11. char s[N];
  12. int a[N],tr[N*],flag[N*];
  13.  
  14. void update(int p)
  15. {
  16. tr[p]=min(tr[p<<],tr[p<<|]);
  17. }
  18. void downdate(int p)
  19. {
  20. if (flag[p]==) return;
  21. tr[p<<]+=flag[p],tr[p<<|]+=flag[p];
  22. flag[p<<]+=flag[p],flag[p<<|]+=flag[p];
  23. flag[p]=;
  24. }
  25. void build(int p,int l,int r)
  26. {
  27. if (l==r)
  28. {
  29. tr[p]=a[l];flag[p]=;
  30. return;
  31. }
  32.  
  33. int mid=(l+r)>>;
  34. build(p<<,l,mid),build(p<<|,mid+,r);
  35. update(p);flag[p]=;
  36. }
  37. void change(int p,int l,int r,int x,int y,int z)
  38. {
  39. if (l==x&&r==y)
  40. {
  41. tr[p]=tr[p]+z;
  42. flag[p]+=z;
  43. return;
  44. }
  45. downdate(p);
  46. int mid=(l+r)>>;
  47. if (y<=mid) change(p<<,l,mid,x,y,z);
  48. else if (x>mid) change(p<<|,mid+,r,x,y,z);
  49. else change(p<<,l,mid,x,mid,z),
  50. change(p<<|,mid+,r,mid+,y,z);
  51. update(p);
  52. }
  53. int query(int p,int l,int r,int x,int y)
  54. {
  55. if (l==x&&r==y) return tr[p];
  56. downdate(p);
  57. int mid=(l+r)>>;
  58. if (y<=mid) return query(p<<,l,mid,x,y);
  59. else if (x>mid) return query(p<<|,mid+,r,x,y);
  60. else return min(query(p<<,l,mid,x,mid),query(p<<|,mid+,r,mid+,r));
  61. update(p);
  62. }
  63. int main()
  64. {
  65. int CASE=;
  66. while (~scanf("%d",&n))
  67. {
  68. printf("Test %d:\n",++CASE);
  69. scanf("%s",s+);
  70. for(int i=;i<=n;i++)
  71. if (s[i]=='(') a[i]=;
  72. else a[i]=-;
  73. for (int i=;i<=n;i++) a[i]=a[i-]+a[i];
  74. build(,,n);
  75. scanf("%d",&q);
  76. for (int i=;i<=q;i++)
  77. {
  78. int x;scanf("%d",&x);
  79. if (x==)
  80. {
  81. if (query(,,n,n,n)==&&tr[]==) printf("YES\n");
  82. else printf("NO\n");
  83. }
  84. else
  85. {
  86. change(,,n,x,n,(s[x]=='(')?-:);
  87. if (s[x]=='(')s[x]=')';
  88. else s[x]='(';
  89. }
  90. }
  91. }
  92. }

SPOJ-BRCKTS (括号序列,线段树)的更多相关文章

  1. bzoj 1095 [ZJOI2007]Hide 捉迷藏(括号序列+线段树)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1095 [题意] 给定一棵树,树上颜色或白或黑而且可以更改,多个询问求最远黑点之间的距离 ...

  2. 【BZOJ】1095: [ZJOI2007]Hide 捉迷藏 括号序列+线段树

    [题目]BZOJ 1095 [题意]给定n个黑白点的树,初始全为黑点,Q次操作翻转一个点的颜色,或询问最远的两个黑点的距离,\(n \leq 10^5,Q \leq 5*10^5\). [算法]括号序 ...

  3. BZOJ1095 [ZJOI2007] Hide 捉迷藏 (括号序列 + 线段树)

    题意 给你一颗有 \(n\) 个点的树 , 共有 \(m\) 次操作 有两种类别qwq 将树上一个点染黑/白; 询问树上最远的两个黑点的距离. \((n \le 200000, m ≤500000)\ ...

  4. 【BZOJ 1095】 1095: [ZJOI2007]Hide 捉迷藏 (括号序列+线段树)

    1095: [ZJOI2007]Hide 捉迷藏 Description 捉迷藏 Jiajia和Wind是一对恩爱的夫妻,并且他们有很多孩子.某天,Jiajia.Wind和孩子们决定在家里玩捉迷藏游戏 ...

  5. Snacks HDU 5692 dfs序列+线段树

    Snacks HDU 5692 dfs序列+线段树 题意 百度科技园内有n个零食机,零食机之间通过n−1条路相互连通.每个零食机都有一个值v,表示为小度熊提供零食的价值. 由于零食被频繁的消耗和补充, ...

  6. SPOJ Meteors - 可持久化线段树 - 二分法

    Byteotian Interstellar Union (BIU) has recently discovered a new planet in a nearby galaxy. The plan ...

  7. hdu 4521 小明系列问题——小明序列 线段树+二分

    小明系列问题——小明序列 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) Pro ...

  8. BZOJ 4034 树上操作(树的欧拉序列+线段树)

    刷个清新的数据结构题爽一爽? 题意: 有一棵点数为 N 的树,以点 1 为根,且树点有边权.然后有 M 个 操作,分为三种: 操作 1 :把某个节点 x 的点权增加 a . 操作 2 :把某个节点 x ...

  9. 【Foreign】划分序列 [线段树][DP]

    划分序列 Time Limit: 20 Sec  Memory Limit: 256 MB Description Input Output 仅一行一个整数表示答案. Sample Input 9 4 ...

  10. BZOJ 1798 AHOI2009 Seq 维护序列 线段树

    题目大意:维护一个序列,提供三种操作: 1.将区间中每个点的权值乘上一个数 2.将区间中每个点的权值加上一个数 3.求一段区间的和对p取模的值 2631的超^n级弱化版.写2631之前能够拿这个练练手 ...

随机推荐

  1. Service官方教程(6)Bound Services主要用来实现通信服务,以及3种实现通信的方案简介。

    1.Bound Services A bound service is the server in a client-server interface. A bound service allows ...

  2. Kali linux 2016.2(Rolling)里安装中文输入法

    写在前面的话 关于中文输入法,实在是有太多了.当然,你也不可以不安装,(安装了增强工具即可),在windows 里输入中文,复制进去即可. 但是呢,想成为高手,还是要学会安装和使用各版本的中文输入法. ...

  3. $.ajax json 在本地正常 上传服务器不正常

    $.ajax( {                        url:"url",// 跳转到 action                        data:{name ...

  4. 实现php间隔一段时间执行一次某段代码

    <?php ignore_user_abort(); //即使Client断开(如关掉浏览器),PHP脚本也可以继续执行.  set_time_limit(0); // 执行时间为无限制,php ...

  5. 21全志r58m平台的framework在使用过程中会莫名的崩溃掉

    21全志r58m平台的framework在使用过程中会莫名的崩溃掉 2018/10/25 16:20 版本:V1.0 开发板:SC5806 1.系统编译: rootroot@cm88:/home/ww ...

  6. Android开发中使用代码删除数据库

    更多信息参考:Android开发中使用代码删除数据库 在Android开发中,如果用到数据库,就会有一个很麻烦的问题,就是有时候需要删除数据库很麻烦,要打开Android Device Monitor ...

  7. 掌握Spark机器学习库-06-基础统计部分

    说明 本章主要讲解基础统计部分,包括基本统计.假设检验.相关系数等 数据集 数据集有两个文件,分别是: beijing.txt 北京历年降水量,不带年份 beijing2.txt 北京历年降水量,带年 ...

  8. 获取请求服务器传输协议http or https

    $protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PO ...

  9. jQuery 的DOM操作

    DOM创建节点及节点属性 创建元素:document.createElement设置属性:setAttribute添加文本:innerHTML加入文档:appendChild append()前面是被 ...

  10. chosen-bootstrap使用技巧

    1.页面加载完成后,通过js方式设置值,无法有效显示的问题. 解决:先设置值,让后在进行初始化操作. // 设置select选中值 $("#type").val(type); // ...