传送门

•题意

  给你一个包含 n 个数的序列 a,定义序列上的两个操作:

    (1)$1,l,r\ :\ ans=\sum_{i=l}^{r}a_i$;

    (2)$2,l,r,x\ :\ \forall\ i \in[l,r],a_i = a_i\ xor\ x$;

  输出操作(1)对应的 ans 值;

•题解

  因为是异或操作,而异或设计的运算都是在二进制上进行的;

  所以考虑按照二进制位建立线段树;

  对于每个叶节点,将对应的数转化成二进制的每一位存入到节点信息中;

  然后就是区间更新,区间查询操作;

•Code

  CodeForces242E(1).cpp

•CF242E升级版

  题目来源与 【2019ICPC亚洲区域赛银川赛站网络预选赛A. Simple Data Structures

  相比于 CF242E 这道题,对序列的操作增加了两个:

    (1)$1,l,r\ :\ ans=\sum_{i=l}^{r}a_i$;

    (2)$2,l,r,x\ :\ \forall\ i \in[l,r],a_i = a_i\ xor\ x$;

    (3)$2,l,r,x\ :\ \forall\ i \in[l,r],a_i = a_i\ |\  x$

    (4)$2,l,r,x\ :\ \forall\ i \in[l,r],a_i = a_i\ \&\  x$

•思路

  和上题思路差不多,考虑到开 20 棵线段树维护以上操作;

  难点在于如何 lazy,以及如何 pushDown();

  考虑到 ^,|,& 的特点;

  对于某个数的二进制的第 i 位,假设为 bit[i];

  易得 bit[i] ^ 0 = bit[i] , bit[i] | 0 = bit[i] , bit[i] &1 = bit[i];

     bit[i] ^ 1 : 相当于反转 bit[i];

     bit[i] | 1 = 1;

     bit[i] & 0 = 0;

  也就是说只有后三个操作才有用;

  考虑到 bit[i] 可能在这之前不止做依次操作;

  但是有一点可以肯定,遇到 bit[i] | 1,bit[i] = 1,不管其之前做过何种操作;

  同样,遇到 bit[i]&0,bit[i]=0;

  而如果先遇到 &0 , 在遇到 ^ 1,相当于将 bit[i] 赋值为 1;

  反之,如果先遇到 |1 , 在遇到 ^ 1,相当于将 bit[i] 赋值为 0;

  这样的话,定义 lazy 有四个取值:

    $lazy=\begin{cases} -1\ ,\ no\ operate\\ \ 0\ \ ,\ become\ 0 \\ \ 1\ \ ,\ become\ 1 \\ \ 2\ \ ,\ reverse\end{cases}$;

  向下传递懒惰标记的时候,要结合父节点的 lazy 和子节点的 lazy 进行更新;

•Code

  CodeForces242E(2).cpp

最新文章

  1. 十四、EnterpriseFrameWork框架核心类库之简易ORM
  2. Python闭包实现的计数器
  3. LeetCode 67. Add Binary
  4. C++11 之 " = delete "
  5. building hadoop2.4.1 on centos7[在centos7上面构建hadoop2.4.1]
  6. robotframework代码定位感悟
  7. MyEclipse使用总结——修改MyEclipse默认的Servlet和jsp代码模板
  8. 解析jQuery中extend方法--用法《一》
  9. jenkins+SVN配置
  10. C#设计模式之8:外观模式
  11. MYSQL-8.0.11-WINX64(免安装版)配置
  12. Postgresql日志收集
  13. 如何判断mac地址时multicast还是broadcast ?
  14. Docker 记一次容器内部修改宿主机挂载目录用户权限后宿主机目录变化
  15. Adam算法
  16. solr 请求参数过长报错,Solr配置maxBooleanClauses属性不生效原因分析
  17. Node.js实战(六)之Npm
  18. POJ--1936 All in All(水题,暴力即可)
  19. thusc2018真退役记
  20. 【CentOS 7】scp示例

热门文章

  1. python中函数和方法区别,以及如何给python类动态绑定方法和属性(涉及types.MethodType()和__slots__)
  2. 50倍时空算力提升,阿里云RDS PostgreSQL GPU版本上线
  3. SSM框架用JSON进行前后端数据传输
  4. material-ui里面的withStyles是什么?
  5. Effective Modern C++:02auto
  6. CSS兼容性(IE和Firefox)技巧大全
  7. day4_python之名称空间与作用域、闭包函数、嵌套函数
  8. 2019-5-25-win10-uwp-win2d-入门-看这一篇就够了
  9. Arthas用法
  10. UVa 10520【递推 搜索】