CodeForces 242E "XOR on Segment"(线段树)
•题意
给你一个包含 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
•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
最新文章
- 十四、EnterpriseFrameWork框架核心类库之简易ORM
- Python闭包实现的计数器
- LeetCode 67. Add Binary
- C++11 之 &;quot; = delete &;quot;
- building hadoop2.4.1 on centos7[在centos7上面构建hadoop2.4.1]
- robotframework代码定位感悟
- MyEclipse使用总结——修改MyEclipse默认的Servlet和jsp代码模板
- 解析jQuery中extend方法--用法《一》
- jenkins+SVN配置
- C#设计模式之8:外观模式
- MYSQL-8.0.11-WINX64(免安装版)配置
- Postgresql日志收集
- 如何判断mac地址时multicast还是broadcast ?
- Docker 记一次容器内部修改宿主机挂载目录用户权限后宿主机目录变化
- Adam算法
- solr 请求参数过长报错,Solr配置maxBooleanClauses属性不生效原因分析
- Node.js实战(六)之Npm
- POJ--1936 All in All(水题,暴力即可)
- thusc2018真退役记
- 【CentOS 7】scp示例
热门文章
- python中函数和方法区别,以及如何给python类动态绑定方法和属性(涉及types.MethodType()和__slots__)
- 50倍时空算力提升,阿里云RDS PostgreSQL GPU版本上线
- SSM框架用JSON进行前后端数据传输
- material-ui里面的withStyles是什么?
- Effective Modern C++:02auto
- CSS兼容性(IE和Firefox)技巧大全
- day4_python之名称空间与作用域、闭包函数、嵌套函数
- 2019-5-25-win10-uwp-win2d-入门-看这一篇就够了
- Arthas用法
- UVa 10520【递推 搜索】