妖梦斩木棒

思路:

  略坑爹;

代码:

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. #define maxn 200005
  4. #define maxm maxn<<2
  5. int n,m,L[maxm],R[maxm],mid[maxm],dis[maxm];
  6. bool xx[maxm],ll[maxm],rr[maxm];
  7. struct AnsType {
  8. int dis;
  9. bool l,r,x;
  10. };
  11. inline void in(int &now)
  12. {
  13. char Cget=getchar();now=;
  14. while(Cget>''||Cget<'')Cget=getchar();
  15. while(Cget>=''&&Cget<='')
  16. {
  17. now=now*+Cget-'';
  18. Cget=getchar();
  19. }
  20. }
  21. void updata(int now)
  22. {
  23. xx[now]=xx[now<<]&xx[now<<|];
  24. dis[now]=dis[now<<]+dis[now<<|];
  25. if(rr[now<<]&&ll[now<<|]&&!xx[now<<]&&!xx[now<<|]) dis[now]++;
  26. ll[now]=xx[now<<]?ll[now<<|]:ll[now<<];
  27. rr[now]=xx[now<<|]?rr[now<<]:rr[now<<|];
  28. }
  29. struct AnsType node(AnsType a,AnsType b)
  30. {
  31. AnsType res;
  32. res.x=a.x&b.x;
  33. res.l=a.x?b.l:a.l;
  34. res.r=b.x?a.r:b.r;
  35. res.dis=a.dis+b.dis;
  36. if(a.r&&b.l&&!a.x&&!b.x) res.dis++;
  37. return res;
  38. }
  39. void build(int now,int l,int r)
  40. {
  41. L[now]=l,R[now]=r;
  42. if(l==r)
  43. {
  44. if(l==) rr[now]=;
  45. else if(r==n) ll[now]=;
  46. else xx[now]=,ll[now]=,rr[now]=;
  47. return;
  48. }
  49. mid[now]=l+r>>;
  50. build(now<<,l,mid[now]);
  51. build(now<<|,mid[now]+,r);
  52. updata(now);
  53. }
  54. void updata(int now,int to,int t)
  55. {
  56. if(L[now]==R[now])
  57. {
  58. ll[now]=rr[now]=xx[now]=;
  59. if(t==) xx[now]=,ll[now]=,rr[now]=;
  60. if(t==) ll[now]=;
  61. if(t==) rr[now]=;
  62. return ;
  63. }
  64. if(to<=mid[now]) updata(now<<,to,t);
  65. else updata(now<<|,to,t);
  66. updata(now);
  67. }
  68. AnsType query(int now,int l,int r)
  69. {
  70. if(L[now]==l&&R[now]==r) return (AnsType){dis[now],ll[now],rr[now],xx[now]};
  71. if(r<=mid[now]) return query(now<<,l,r);
  72. else if(l>mid[now]) return query(now<<|,l,r);
  73. else return node(query(now<<,l,mid[now]),query(now<<|,mid[now]+,r));
  74. }
  75. int main()
  76. {
  77. in(n),in(m),build(,,n);
  78. int op,l,r,x;char ch[];
  79. while(m--)
  80. {
  81. in(op);
  82. if(op==)
  83. {
  84. in(x),scanf("%s",ch);
  85. if(ch[]=='X') ch[]=;
  86. else if(ch[]==')') ch[]=;
  87. else ch[]=;
  88. updata(,x,ch[]);
  89. }
  90. else
  91. {
  92. in(l),in(r);
  93. AnsType res=query(,l,r);
  94. printf("%d\n",res.dis);
  95. }
  96. }
  97. return ;
  98. }

AC日记——妖梦斩木棒 洛谷 P3797的更多相关文章

  1. AC日记——妖梦拼木棒 洛谷 P3799

    妖梦拼木棒 思路: 神特么题: 代码: #include <bits/stdc++.h> using namespace std; #define mod 1000000007LL int ...

  2. 洛谷 P3797 妖梦斩木棒 解题报告

    P3797 妖梦斩木棒 妖梦是住在白玉楼的半人半灵,拥有使用剑术程度的能力. 题目描述 有一天,妖梦正在练习剑术.地面上摆放了一支非常长的木棒,妖梦把它们切成了等长的\(n\)段.现在这个木棒可以看做 ...

  3. 洛谷P3797 妖梦斩木棒

    P3797 妖梦斩木棒 题目背景 妖梦是住在白玉楼的半人半灵,拥有使用剑术程度的能力. 题目描述 有一天,妖梦正在练习剑术.地面上摆放了一支非常长的木棒,妖梦把它们切成了等长的n段.现在这个木棒可以看 ...

  4. 洛谷 P3797 妖梦斩木棒

    https://www.luogu.org/problem/show?pid=3797 题目背景 妖梦是住在白玉楼的半人半灵,拥有使用剑术程度的能力. 题目描述 有一天,妖梦正在练习剑术.地面上摆放了 ...

  5. [luogu P3797] 妖梦斩木棒 [线段树]

    题目背景 妖梦是住在白玉楼的半人半灵,拥有使用剑术程度的能力. 题目描述 有一天,妖梦正在练习剑术.地面上摆放了一支非常长的木棒,妖梦把它们切成了等长的n段.现在这个木棒可以看做由三种小段构成,中间的 ...

  6. [Luogu3797] 妖梦斩木棒

    题目背景 妖梦是住在白玉楼的半人半灵,拥有使用剑术程度的能力. 题目描述 有一天,妖梦正在练习剑术.地面上摆放了一支非常长的木棒,妖梦把它们切成了等长的n段.现在这个木棒可以看做由三种小段构成,中间的 ...

  7. Luogu P3797 妖梦斩木棒

    解题思路 用线段树做这个就不用说了吧,但是要维护的东西确实很神奇.在每一个节点上都维护一个$lbkt$,表示这个区间上最靠左的右括号的位置:一个$rbkt$,表示这个区间上最靠右的左括号的位置.还有一 ...

  8. AC日记——校门外的树 洛谷 P1047

    题目描述 某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是1米.我们可以把马路看成一个数轴,马路的一端在数轴0的位置,另一端在L的位置:数轴上的每个整数点,即0,1,2,……,L,都种 ...

  9. AC日记——无线网络发射器选址 洛谷 P2038

    题目描述 随着智能手机的日益普及,人们对无线网的需求日益增大.某城市决定对城市内的公共场所覆盖无线网. 假设该城市的布局为由严格平行的129 条东西向街道和129 条南北向街道所形成的网格状,并且相邻 ...

随机推荐

  1. Codeforces Round #326 (Div. 2) B Duff in Love 简单数论 姿势涨

    B. Duff in Love time limit per test 2 seconds memory limit per test 256 megabytes input standard inp ...

  2. HDU1828线段树(扫描线)

    Picture Time Limit: 6000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submi ...

  3. DataXceiver error processing unknown operation src: /127.0.0.1:36479 dst: /127.0.0.1:50010处理

    异常信息如下: 2015-12-09 17:39:20,310 ERROR datanode.DataNode (DataXceiver.java:run(278)) - hadoop07:50010 ...

  4. Python to list users in AWS

    code import boto3 c1=boto3.client('iam') #list_users will be a dict users=c1.list_users() #transfer ...

  5. CSS3 :empty 选择器

    这可是个好东西,我也是这个星期才发现的,下面我们来说具体功能. <!DOCTYPE html> <html> <head> <meta charset=&qu ...

  6. HDU5852 Intersection is not allowed!

    There are K pieces on the chessboard. The size of the chessboard is N*N. The pieces are initially pl ...

  7. 【BZOJ】1704: [Usaco2007 Mar]Face The Right Way 自动转身机

    [题意]n头牛,一些向前一些向后,每次可以使连续k头牛转身,求使旋转次数最小的k. [算法]贪心 [题解]这题题解很迷,大概思想是k没有单调性,故枚举k,从左到右扫描遇到一只向后的牛就旋转一次. 贪心 ...

  8. ajax post请求json数据在spring-controller解析

    1.前端post请求数据: userInfo=[{"id":"5","uname":"小李","phone&q ...

  9. 复现VGG19训练自定义图像分类

    1.复现VGG训练自定义图像分类,成功了哈哈. 需要代码工程可联系博主qq号,在左边连接可找到. 核心代码: # coding:utf-8 import tensorflow as tf import ...

  10. Part2-HttpClient官方教程-Chapter1-基础

    前言 超文本传输协议(HTTP)可能是当今Internet上使用的最重要的协议.Web服务.网络支持的设备和网络计算的增长继续扩展了HTTP协议在用户驱动的Web浏览器之外的作用,同时增加了需要HTT ...