题意:

给你一个0/1的数组,然后给你n段区间,说这个区间里要反转一次,然后给你Q个询问,问你这个位置是什么;

思路:

我们线段树维护一下就好了额;

其实反转的话,还是算次数是不是,奇偶嘛;

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. typedef long long LL;
  4. const int N=1e5+10;
  5. struct SegT{
  6. int sum;
  7. int val;
  8. int left;
  9. int right;
  10. };
  11. SegT q[N*4];
  12. char id[N];
  13.  
  14. void Build(int num,int L ,int R)
  15. {
  16. q[num].left=L;
  17. q[num].right=R;
  18. q[num].val=0;
  19. q[num].sum=0;
  20. if(L==R)
  21. return;
  22. int mid=(L+R)>>1;
  23. Build(2*num,L,mid);
  24. Build(2*num+1,mid+1,R);
  25. }
  26.  
  27. void PushDown(int num)
  28. {
  29. if(q[num].val)
  30. {
  31. q[2*num].sum+=(q[2*num].right - q[2*num].left+1)*q[num].val;
  32. q[2*num].val+=q[num].val;
  33. q[2*num+1].sum+=(q[2*num+1].right - q[2*num+1].left+1)*q[num].val;
  34. q[2*num+1].val+=q[num].val;
  35. q[num].val=0;
  36. }
  37. }
  38.  
  39. void Update(int num,int s,int t)
  40. {
  41. if(q[num].left>=s&&q[num].right<=t)
  42. {
  43. q[num].sum+=(q[num].right - q[num].left+1);
  44. q[num].val+=1;
  45. return;
  46. }
  47. PushDown(num);
  48. int mid=(q[num].left+q[num].right)>>1;
  49.  
  50. if(mid>=t)
  51. Update(2*num,s,t);
  52. else if(mid<s)
  53. Update(2*num+1,s,t);
  54. else
  55. {
  56. Update(2*num,s,mid);
  57. Update(2*num+1,mid+1,t);
  58. }
  59. q[num].sum=q[2*num].sum+q[2*num+1].sum;
  60. }
  61.  
  62. int query(int num,int x)
  63. {
  64. if(q[num].left==q[num].right&&q[num].left==x)
  65. return q[num].sum;
  66. PushDown(num);
  67.  
  68. int mid=(q[num].left+q[num].right)>>1;
  69.  
  70. if(mid>=x)
  71. return query(2*num,x);
  72. else
  73. return query(2*num+1,x);
  74. }
  75.  
  76. int main()
  77. {
  78. int T,cas=1,n;
  79. scanf("%d",&T);
  80. while(T--)
  81. {
  82. scanf("%s",id+1);
  83. n=strlen(id+1);
  84. Build(1,1,n);
  85.  
  86. int Q,x,y;
  87. char tx[3];
  88. scanf("%d",&Q);
  89. printf("Case %d:\n",cas++);
  90. while(Q--)
  91. {
  92. scanf("%s",tx);
  93. if(tx[0]=='I')
  94. {
  95. scanf("%d%d",&x,&y);//已经保证 1 ≤ i ≤ j ≤ n.;
  96. Update(1,x,y);
  97. }
  98. else
  99. {
  100. scanf("%d",&x);
  101. printf("%d\n",query(1,x)%2==0?(id[x]-'0'):(1-id[x]+'0'));
  102. }
  103. }
  104. }
  105. return 0;
  106. }

Lightoj1080 【线段树】的更多相关文章

  1. lightoj1080 线段树

    //Accepted 6628 KB 520 ms //I a b 把a到b区间的二进制位去反,转化成a到b区间的数全部加1 //Q a 判断第a位的奇偶 #include <cstdio> ...

  2. bzoj3932--可持久化线段树

    题目大意: 最近实验室正在为其管理的超级计算机编制一套任务管理系统,而你被安排完成其中的查询部分.超级计算机中的 任务用三元组(Si,Ei,Pi)描述,(Si,Ei,Pi)表示任务从第Si秒开始,在第 ...

  3. codevs 1082 线段树练习 3(区间维护)

    codevs 1082 线段树练习 3  时间限制: 3 s  空间限制: 128000 KB  题目等级 : 大师 Master 题目描述 Description 给你N个数,有两种操作: 1:给区 ...

  4. codevs 1576 最长上升子序列的线段树优化

    题目:codevs 1576 最长严格上升子序列 链接:http://codevs.cn/problem/1576/ 优化的地方是 1到i-1 中最大的 f[j]值,并且A[j]<A[i] .根 ...

  5. codevs 1080 线段树点修改

    先来介绍一下线段树. 线段树是一个把线段,或者说一个区间储存在二叉树中.如图所示的就是一棵线段树,它维护一个区间的和. 蓝色数字的是线段树的节点在数组中的位置,它表示的区间已经在图上标出,它的值就是这 ...

  6. codevs 1082 线段树区间求和

    codevs 1082 线段树练习3 链接:http://codevs.cn/problem/1082/ sumv是维护求和的线段树,addv是标记这歌节点所在区间还需要加上的值. 我的线段树写法在运 ...

  7. PYOJ 44. 【HNSDFZ2016 #6】可持久化线段树

    #44. [HNSDFZ2016 #6]可持久化线段树 统计 描述 提交 自定义测试 题目描述 现有一序列 AA.您需要写一棵可持久化线段树,以实现如下操作: A v p x:对于版本v的序列,给 A ...

  8. CF719E(线段树+矩阵快速幂)

    题意:给你一个数列a,a[i]表示斐波那契数列的下标为a[i],求区间对应斐波那契数列数字的和,还要求能够维护对区间内所有下标加d的操作 分析:线段树 线段树的每个节点表示(f[i],f[i-1])这 ...

  9. 【BZOJ-3779】重组病毒 LinkCutTree + 线段树 + DFS序

    3779: 重组病毒 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 224  Solved: 95[Submit][Status][Discuss] ...

随机推荐

  1. cvpr2014

    http://www.cvpapers.com/cvpr2014.html 吴佳俊 楼天城

  2. UVA - 1045 The Great Wall Game(二分图最佳完美匹配)

    题目大意:给出棋盘上的N个点的位置.如今问将这些点排成一行或者一列.或者对角线的最小移动步数(每一个点都仅仅能上下左右移动.一次移动一个) 解题思路:暴力+二分图最佳完美匹配 #include < ...

  3. angular cannot get /

    每次遇到这问题都一脸懵逼,好像自己啥都没改咋就悲剧了 目前知道的办法是在命令行运行ng serve,它会告诉你详细错误 因为我是通过asp.net core的集成环境运行的,它没显示出详细错误

  4. Mvc Autofac构造器注入

    新建MVC项目,添加程序集引用 定义接口ILog public interface ILog { string Save(string message); } 类TxtLog实现接口ILog publ ...

  5. Vue使用axios

    main.js-------------------   import axios from "axios"; import qs from "qs"; imp ...

  6. ThreadPoolTaskExecutor

    我们在开发过程中经常要用到线程池,线程池应该统一管理起来,而不是随用随建.ThreadPoolTaskExecutor——将线程池交给spring管理 1. ThreadPoolTaskExecuto ...

  7. 九度OJ 1093:WERTYU (翻译)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:1563 解决:609 题目描述: A common typing error is to place the hands on the ke ...

  8. WildFly JBoss 应用程序服务器

    https://en.wikipedia.org/wiki/WildFly [实现基于面向服务的架构SOA的web应用和服务] WildFly,[1] formerly known as JBoss ...

  9. RequestDispatcher用法

    1.具体用法: RequestDispatcher dispatcher = req.getRequestDispatcher("updateByUserId_001.jsp"); ...

  10. 一套完整的前台页面增删改查以及js(easyui)

    增加页面: <%@ page language="java" contentType="text/html; charset=UTF-8" pageEnc ...